2012-11-19 19 views
3

背景故事PHP性能(指令緩存/功能波動)

我維護所有使用大土生土長的PHP庫(基於Web)應用的頻譜。其中一些應用程序是由員工使用的傳統桌面應用程序,但另一些應用程序(這些問題也與此問題更相關)是隨着受歡迎程度不斷增加,性能變得越來越重要的PHP網站。

當前的PHP高速緩存方法

爲了加快我們的網站之一(這是一個商店,把它作爲thinkgeek.com),我使用memcached的緩存不經常需要作爲網站的某些部分動態構建(例如某個類別的產品列表)。

我們也使用APC的出廠默認安裝作爲OPCode緩存。

這兩種方法都可以顯着改善網站的性能,但我非常希望進一步走上優化之路。在PHP

從後臺數據庫即將自己

功能波動,我很喜歡怎樣的PostgreSQL例如,使用function volatility得到大規模的性能提升,同時保持可靠和準確的結果。

我的問題是,是否有PHP的擴展,允許開發人員將某些函數(或類方法)標記爲IMMUTABLE(意思是當給定相同的輸入參數時,該函數的結果總是相同的)。然後,這個緩存擴展可以緩存該函數的結果,這會在使用大型代碼庫時導致巨大的性能提升。

一個簡單的例子是,如SomeClass::getWebsiteFooter();它返回一些HTML代碼,總是相同的,除非該網站已被改變(在這種情況下,高速緩存將被刷新)的方法。

是否有這樣的事情存在?我一直無法在市場上找到類似的東西。有沒有其他改進性能的方法可能有利於我的情況?

+0

APC用戶緩存緩存? –

+0

你正在尋找的技術名稱是memoize(這不是一個錯字,它沒有R)。你可以搜索「php memoize」,但是實現你自己的緩存版本要好得多(因爲它本質上就是這樣),因爲你必須以某種方式使緩存無效,正如Denis Ermolin所說 - 你可以緩存它APC。 –

+0

@ N.B。謝謝!不知道術語memoize。你自己可能有一點要做,但由於它是一個相當大的框架,它會使代碼庫混亂很多,必須用幾行memcache查找/存儲代碼來包裝所有內容(即使它每次只有3行) 。能夠將方法標記爲不可變的主要優點(如:public immutable function foo();'),我認爲所有的魔法都可以通過擴展自動處理,而代碼庫不會混亂。 – Staex

回答

1

我會說你已經看作爲一個Web應用程序的PHP應用程序,並實現幾個級別的緩存。

IMMUTABLE方法 - 我不認爲是好方法。在數據庫級別,應用程序級別(memcached)上使用緩存是很好的開始。

那麼我會建議在視圖級別Smarty caching和緩存代理像SquidVarnish

+0

好的,謝謝我改變了它,編輯並沒有按照我的意願去做。 –

+0

我已經使用memcached(另外還有一個APC操作碼緩存)在數據和視圖層上實現了緩存。但是,隨着應用程序使用多個應用程序共享的大型代碼庫,我正試圖改進這一點。 Memcached完全有這個能力,但是我必須將一些memcached代碼引入到一百種不同的方法中,以便在整個板上應用效果。如果可以指示方法的波動性,那麼代碼本身不需要修改,而後端(PHP ext)可以完成所有工作。 – Staex