2009-11-21 30 views
8

我一直在寫PHP多年,並且已經使用了太陽下的每個框架,但有一件事總是給我留下了......這就是整個血腥的事情必須在每次有人告訴我的服務器時解釋和執行它們想要送達的頁面。我已經嘗試過緩存,FastCGI,Zend Job Queue(以及類似的symfony插件 - 以及我自己的基於DB的解決方案,這些解決方案實現了System_Daemon類來運行後臺進程),我也試過了設法使我的應用程序相當快地使用所有這些東西......但我無法克服我的設置文件,系統/環境檢查功能以及所有應該只加載一次的東西......加載每當有人打我的網頁時,認真加速PHP?

所以,我的絮絮叨叨導致以下Q--

是否有裝載PHP的某些方面到RAM,這樣當被請求的頁面,我所有的settings.yml中文件的一些方法/技術,系統檢查,框架文件,緩存頁面等可以直接從內存中加載,甚至不需要接觸HD ...或者每天需要通過相同的加載機制50,000次來啓動程序?

如果PHP中沒有任何東西......是否還有其他可以用這種方式編譯的'web'語言,以允許真正的init-once應用程序?

回答

9

我想你應該給memcached一個嘗試,如果你在談論緩存數據。我認爲如果你在apache中使用諸如mod_php之類的東西(它不會在請求之間死掉),那麼PHP在編譯php頁面的時候非常精通。

+0

也Memcached的使用Facebook來固定自己的緩存 – 2013-05-20 07:31:39

2

在RAM磁盤上創建一個完整的頁面緩存,並讓您的Web服務器從那裏提供頁面。這是wordpress supercache插件使用的一種方法,如果您的網站適用於整頁緩存,則該方法非常有效。這個whay你甚至沒有調用PHP解釋器。

對於已登錄(有開放會話)的用戶,您可以創建一個重寫條件,將其請求重定向到PHP引擎。

此外,總是使用像APC一樣的操作碼緩存,並將其用於緩存配置文件(memcache也很好)。

1

如果您要求的是類似應用程序服務器的JVM/Tomcat,那麼答案可能不是。據我所知,沒有什麼(可用)像這樣存在於PHP中。 PHP使用無共享體系結構,因此設計時所有請求都設置爲一切。但實際上,這使得PHP可以很好地擴展。

至於加速您的應用程序,請嘗試使用memcachedcode accelerator。也許看看Zend Server獲得一個完整的軟件包。

0

關於你的最後一個問題,我相信至少大部分Python和Ruby Web框架都是這樣工作的。

Ruby Web應用程序現在已經建成,因此應用程序僅在每個服務器進程中初始化一次。當請求進入時,服務器(例如Apache)將它們傳遞給正在後臺運行的Web應用程序(通過接口Rack)。

這是基於Rack基於web框架的工作方式。老版本的Ruby on Rails很相似,不過他們使用不同的接口與Web服務器交談。

+0

是否有PHP等同? – 2009-11-21 17:23:30

8

看看APC (Alternative PHP Cache),它保留了編譯文件(PHP操作碼)的緩存,並且還允許您使用apc_fetch,apc_store將隨機變量存儲在內存中。

安裝非常簡單,它確實提高了性能。

+0

+1因爲apc不僅僅是一個操作碼緩存 – gpilotino 2009-11-21 16:48:36

+0

另外這個將會被內置到php 6 – 2009-11-21 16:50:27