讓網(wǎng)站飛起來,PHP加速探索
源派
6595
800
一、簡介 本文嘗試對PHP程序加速的各個方面進(jìn)行探索,包括必要性以及從不同角度采取的具體措施。希望有助于讀者了解PHP程序加速,并應(yīng)用于實際。
二、是否需要加速? 1、這個問題聽起來有點愚蠢。在這個時代,很少有人會懷疑時間是最寶貴的財富,尤其是在商業(yè)市場上。程序執(zhí)行越快,用戶就節(jié)約越多的時間,這樣你的程序就可以用更少的時間和服務(wù)器資源為用戶服務(wù),從而產(chǎn)生更多效益。
2、我想對于大部份人(包括我自己)來說,很多WEB項目都是在很緊張的時間里完成的,通常沒有經(jīng)過縝密的思考和嚴(yán)格的測試。當(dāng)開始一個新的WEB項目。很多人都在構(gòu)建那種“快而亂”的應(yīng)用,缺乏必要的時間來調(diào)整和改良代碼,這時優(yōu)化和加速就是我們必須采取的措施。
3、然而需要特別指出的是,并不是所有程序都需要加速。
4、優(yōu)化已完成的代碼是很浪費時間的,最好的方法是在寫代碼的時候就注意到效率,然后完成項目后只優(yōu)化確實需要優(yōu)化的那部份。一般一個程序只會有少數(shù)幾個影響速度的瓶頸,將它們找出來并解決掉,程序就可以很好地運行。另外,當(dāng)遇到執(zhí)行效率低下的情況,首先要用大局的眼光來找出影響效率的主要因素,而不要拘泥于細(xì)節(jié)—例如數(shù)據(jù)量過大,服務(wù)器帶寬不夠,或硬件配置過低,在這樣的情況下,優(yōu)化代碼于事無補。
5、另外,在沒有發(fā)現(xiàn)程序有明顯的執(zhí)行緩慢的跡象時,就不要太吹毛求疵,為了改進(jìn)一些非常細(xì)節(jié)的代碼而浪費時間。用這些時間,你可以完成另一個項目或為原來的項目完成一個擴(kuò)展功能。當(dāng)然你可以笑話我不夠負(fù)責(zé),沒有把工作做得盡善盡好,我也可以說你是完美主義者:-)
6、綜上,在你決定為你的PHP程序提速之前,問問自己是否有必要。
三、如何加速? 要回答“如何加速”這個問題前,需要先回答以下兩個小問題:
你的程序慢在哪一部份?
PHP可以從哪幾個方面考慮加速?
第一個小問題顯然我無法給你答案,但我建議你用“測試腳本執(zhí)行速度”的方法來解決。只有找出限制速度的瓶頸,才能考慮如何去解決。
第二個小問題我大概的答案是:代碼優(yōu)化,壓縮輸出,內(nèi)容緩存輸出,函數(shù)緩存輸出,加速/緩存工具軟件。如果你知道更多請告訴我:-)
下面我們來詳細(xì)地研究一下這幾個方面的相關(guān)技術(shù)。當(dāng)然實際上每個方面都有無數(shù)的細(xì)節(jié)可以討論,下面的內(nèi)容難免會有片面的地方,歡迎補充。
四、加速 代碼優(yōu)化
掌握了PEAR::BenchMark,現(xiàn)在你已經(jīng)知道如何測試你的代碼,知道如何判斷你的代碼是快是慢,是哪一部份比較慢。那么接下來我要說的就是如何消滅或優(yōu)化那部份慢的代碼。
這一點上我個人最主要的經(jīng)驗只有兩點,一是消除錯誤的或低效的循環(huán);二是優(yōu)化數(shù)據(jù)庫查詢語句。其實還存在一些其它的優(yōu)化細(xì)節(jié),比如“str_replace比ereg_replace快”、“echo比print快”等等。這些我暫時都放在一邊,稍后我會提到用緩存來對付過于頻繁的IO。
下面我們將三個功能相同,但程序?qū)懛ú煌暮瘮?shù)的效率(消耗的時間)進(jìn)行對比。