(一)簡介
本文嘗試對PHP程式加速的各個方面進行探索,包括必要性以及從不同角度採取的具體措施。希望有助於讀者瞭解PHP程式加速,並應用於實際。
(二)是否需要加速?
這個問題聽起來有點愚蠢。在這個時代,很少有人會懷疑時間是最寶貴的財富,尤其是在商業市場上。程式執行越快,使用者就節約越多的時間,這樣你的程式就可以用更少的時間和伺服器資源為使用者服務,從而產生更多效益。
我想對於大部份人(包括我自己)來說,很多WEB項目都是在很緊張的時間裡完成的,通常沒有經過縝密的思考和嚴格的測試。當開始一個新的WEB項目。很多人都在構建那種“快而亂”的應用,缺乏必要的時間來調整和改良代碼,這時最佳化和加速就是我們必須採取的措施。
然而需要特別指出的是,並不是所有程式都需要加速。
最佳化已完成的代碼是很浪費時間的,最好的方法是在寫代碼的時候就注意到效率,然後完成項目後只最佳化確實需要最佳化的那部份。一般一個程式只會有少數幾個影響速度的瓶頸,將它們找出來並解決掉,程式就可以很好地運行。另外,當遇到執行效率低下的情況,首先要用大局的眼光來找出影響效率的主要因素,而不要拘泥於細節—例如資料量過大,伺服器頻寬不夠,或硬體設定過低,在這樣的情況下,最佳化代碼於事無補。
另外,在沒有發現程式有明顯的執行緩慢的跡象時,就不要太吹毛求疵,為了改進一些非常細節的代碼而浪費時間。用這些時間,你可以完成另一個項目或為原來的項目完成一個擴充功能。當然你可以笑話我不夠負責,沒有把工作做得盡善盡好,我也可以說你是完美主義者:-)
綜上,在你決定為你的PHP程式提速之前,問問自己是否有必要。
(三)如何加速?
要回答“如何加速”這個問題前,需要先回答以下兩個小問題:
你的程式慢在哪一部份?
PHP可以從哪幾個方面考慮加速?
第一個小問題顯然我無法給你答案,但我建議你用“測試指令碼執行速度”的方法來解決。只有找出限制速度的瓶頸,才能考慮如何去解決。
第二個小問題我大概的答案是:代碼最佳化,壓縮輸出,內容緩衝輸出,函數緩衝輸出,加速/緩衝工具軟體。如果你知道更多請告訴我:-)
下面我們來詳細地研究一下這幾個方面的相關技術。當然實際上每個方面都有無數的細節可以討論,下面的內容難免會有片面的地方,歡迎補充。
<1> 測試
◆ 伺服器負載測試
伺服器負載太大而影響程式效率也是很常見的,我們需要對此進行測試。這裡我以目前最常用的apache(Unix平台最流行的WEB伺服器平台)伺服器為例。
apache(Unix平台最流行的WEB伺服器平台)伺服器內建有一個叫AB(apache(Unix平台最流行的WEB伺服器平台)Bench)的工具,在bin目錄下。使用這個輕巧的工具我們可以對伺服器進行負載測試,看看在重負荷之下伺服器的表現如何。apache(Unix平台最流行的WEB伺服器平台)Bench 可以針對某個特定的 URL 模擬出連續的聯機請求,同時還可以模擬出同時間點數個相同的聯機請求,因此利用 apache(Unix平台最流行的WEB伺服器平台)Bench 可協助我們在網站開發期間模擬實際上線可能的情況,利用模擬出來的資料作為調整伺服器設定或程式的依據。
在命令列下輸出:
./ab -n number_of_total_requests -c number_of_simultaneous_requests http://your_web_server/your_php_app.php
例如:
./ab -n 1000 -c 50 http://www.domain.com/myapp.php
AB將同時向http://www.domain.com/myapp.php發出50個並發請求,共發出1000次。
測試結果將可能是這樣的:
Server Software: apache(Unix平台最流行的WEB伺服器平台)/2.0.16
Server Hostname: localhost
Server Port: 80
Document Path: /myapp.php
Document Length: 1311 bytes
Concurrency Level: 50
Time taken for tests: 8.794 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 1754000 bytes
9 7 3 123456 4 8 :