在大規模的系統開發中,Cache無疑是至關重要的,php世界裡,雖然不如java當中,有那麼豐富的cache解決方案可以選擇,但是,仍然有一些成熟的方案,從《advanced PHP programming》中我就學到如下一些:
1.語言層面的最佳化:php具有不少引擎(engine)層面的api,透過這些api,可以改變引擎執行的行為,從而達到最佳化運作的目的。其中,最值得做的就是對編譯結果cache。眾所周知,php每次執行都需要經歷原始碼–〉編譯–〉中間碼–〉引擎執行這樣的過程,對於一些大型應用,相當多的時間花費在無益的編譯上了(不僅僅是訪問頁面的php檔案需要經過編譯環節,當腳本中利用require(), include()所包含的某些檔案都需要經過編譯)。透過對編譯結果的cache,能夠大幅提升系統的效能(和系統複雜度、規模成正比) 。
php世界中三個主流的能夠實現編譯cache的工具有:
The Zend Accelerator—A commercial, closed-source, for-cost compiler cache produced by
Zend Industries
The ionCube Accelerator—A commercial, closed-source, but free compiler cache written by Nick Lindridge and distributed by his company, ionCube
APC—A free and open-source compiler cache written by Daniel Cowgill and George Schlossnagle
APC的安裝方法,APC包含在PECL中,具體安裝如下190-823 190-802 :
執行指令
#pear install apc
之後,在php.ini文件中新增:
extension = /path/to/apc.so
這樣,就完成了安裝,當下次運行php,APC就會自動激活,將編譯結果放入共享內存中cache起來,下次再執行的時候就直接從記憶體中取得編輯結果執行,不需要再次編譯。
疑問:對於上次編譯後變動了的php,APC是否能夠自動重新編譯?
2.php程式碼最佳化:利用一些工具能夠市的編譯後產生優質中間程式碼,具體如下:
The Zend Optimizer is a closed-source but freely available optimizer.
The ionCube accelerator contains an integrated optimizer.
proof-of-concept optimizer in PEAR.
優化器主要的功能:
1、清除無用的程式碼,例如永遠也不會執行的死程式碼。
2.常數的計算,例如將$seconds_in_day = 24*60*60直接變成$seconds_in_day = 86400;
3、其它程式碼最佳化功能,例如有這麼一個語句:
$count++;
會優化為++$count,使得執行速度更快。 當然,如果語句是$i = $count++;則不會進行最佳化