課程咨詢(xun): 400-996-5531 / 投(tou)訴(su)建議: 400-111-8989
認真做教育 專心促就業(ye)
作為(wei)流行的(de)(de)(de) Web 編程(cheng)語言(yan), PHP(PHP培訓(xun) php教程(cheng) ) 的(de)(de)(de)最大優勢就是(shi)(shi)速度。 PHP4 已經在這方面做(zuo)的(de)(de)(de)非常好了(le)(le),你幾乎找(zhao)不(bu)到比(bi)它更(geng)快的(de)(de)(de)腳(jiao)本編程(cheng)語言(yan)了(le)(le)。但是(shi)(shi)如果你的(de)(de)(de)應用負荷很大,而帶寬又比(bi)較小,或者(zhe)有(you)其他的(de)(de)(de)瓶頸影響你的(de)(de)(de)服(fu)務(wu)器(qi)性能,那么,你不(bu)妨試試筆者(zhe)為(wei)你開出的(de)(de)(de)幾個藥方,看看是(shi)(shi)否靈驗。
一、代碼優化
一談到代(dai)碼優化,或許你想到的就是(shi)整齊明了的代(dai)碼,但是(shi)本(ben)文的意思卻(que)不(bu)是(shi)在此,因(yin)為如果要尋求速(su)度的話,就要對PHP 源(yuan)碼作(zuo)相應的調整。一般說來就是(shi)去(qu)掉多余的注(zhu)釋,讓代(dai)碼不(bu)可讀。但是(shi)這對于一個(ge)具有良好素養的程(cheng)序員來說,簡(jian)直就是(shi)不(bu)可思議的。好在Zend Technologies 公司發布了 Zend 優化引擎可以幫助你做到這一點。它現在是(shi)免(mian)費的,但是(shi)你必須(xu)遵循 Zend Optimizer 許可。這個(ge)產品可以對引擎產生的中間代(dai)碼進行(xing)優化。
安裝這個引(yin)擎比較簡單,下載對應(ying)平臺的(de)版本以(yi)后,解開(kai)壓縮文件,然后在(zai) php.ini 文件里面加上下面兩行,重(zhong)新啟動 Web 服務(wu)器,就搞定了。
zend_optimizer.optimization_level=15
zend_extension="/path/to/ZendOptimizer.so"
zend_loader.enable=Off
如果是(shi)(shi) Win32 平臺(tai)的話就應該是(shi)(shi):
zend_optimizer.optimization_level=15
zend_extension_ts="C:\path\to\ZendOptimizer.dll"
zend_loader.enable=Off
啊!沒有搞錯吧?怎么是(shi)(shi)三行?其實第(di)三行是(shi)(shi)可選(xuan)的。因為(wei)看起來把 zend_loader 關(guan)掉能(neng)提(ti)高一點速度,因此(ci)值得把這(zhe)第(di)三行放(fang)到 php.ini 。需要注(zhu)意的是(shi)(shi),關(guan)掉的前提(ti)條件是(shi)(shi)你沒有在(zai)使(shi)用 Zend 加密(mi)程序。
二、緩沖
如果想要(yao)更進一(yi)步提升速度,我(wo)們就需要(yao)考(kao)慮采(cai)用緩(huan)沖技術了(le)。有(you)一(yi)些(xie)可選的解決方案(an),包括 Zend Cache (測試(shi)版本), APC, 以及(ji) Afterburner Cache,另外還有(you) jpCache 等(deng)。
以上(shang)這些都是屬于緩沖模塊,他們把(ba)第一(yi)次對 .php 文件請求(qiu)產生(sheng)的(de)(de)中間(jian)代碼(ma)存儲在 Web 服務器的(de)(de)內存中,然后對以后的(de)(de)請求(qiu)返(fan)回“編譯好”的(de)(de)版本。因(yin)為這樣減少了磁盤讀寫(xie),而且都在內存工(gong)作,所(suo)以這個過程能顯(xian)著提升應用性能,
現成的這類產品比較多,到底選擇誰呢?
Zend Cache 是一(yi)款不(bu)錯的(de)(de)(de)商(shang)業產品,在(zai)第一(yi)次加載那些(xie)很大的(de)(de)(de) PHP 頁面后(hou),你(ni)會(hui)(hui)明顯感受到速度(du)的(de)(de)(de)提(ti)升,服務器會(hui)(hui)留出更多的(de)(de)(de)資源。可惜這個產品是要花銀(yin)子的(de)(de)(de),但是在(zai)有些(xie)情形下,你(ni)可不(bu)要吝(lin)嗇(se)這些(xie)銀(yin)子。
Afterburner Cache 是(shi) Bware Technologies 的(de)產品,目(mu)前(qian)還處于 Beta 版本,看起來(lai)似(si)乎和 Zend Cashe 一樣,但是(shi)它不(bu)(bu)能(neng)達到 Zend Cache 那樣好的(de)效果,也(ye)不(bu)(bu)能(neng)和 Zend 優化引(yin)擎一起工作,但是(shi)它是(shi)免費(fei)的(de),所以我采用了這個模塊。
APC (Alternative PHP Cache) 是 Community Connect 發布(bu)的又一個免費模塊,看(kan)起來似(si)乎可(ke)以用于生(sheng)產環境(jing)了。
Web 內容壓縮
對于日益(yi)擁(yong)擠的網絡來說(shuo),節約(yue)帶(dai)寬(kuan)就像節約(yue)用(yong)水一(yi)樣是(shi)十分值得提倡(chang)的。根據IETF 標準,大多數瀏(liu)(liu)覽器(qi)應(ying)該支持使用(yong) gzip 壓(ya)縮的內(nei)容。也就是(shi)說(shuo)你可以(yi)把用(yong) gzip 壓(ya)縮的內(nei)容發(fa)送給瀏(liu)(liu)覽器(qi),瀏(liu)(liu)覽器(qi)會透明的解壓(ya)數據。
mod_gzip 是 Remote Communications 公司推(tui)出(chu)的免費 Apache 模塊,能把靜(jing)(jing)態的Web 內容壓縮(suo)后(hou)發送給瀏(liu)覽(lan)器(qi)。對于大多數靜(jing)(jing)態網頁來(lai)說(shuo),這個(ge)模塊十分合適(shi)。盡(jin)管
Remotecommunications 公司的人(ren)說這個模(mo)塊支持所有(you)那些 mod_php, mod_perl,mod 什么產(chan)生的動態內容,但是看起來(lai)還(huan)是不能(neng)(neng)工作,從 mod_gzip 的郵(you)件列表來(lai)看,這個問題(ti)估計要到1.3.14.6f 才能(neng)(neng)解(jie)決(jue)。
如果要(yao)壓縮動態(tai)內容(rong)的(de)(de)(de)話,我們可(ke)以采用(yong)(yong)class.gzip_encode.php,一(yi)個(ge)在腳本(ben)開始和結束時使用(yong)(yong)的(de)(de)(de) PHP 類(lei)。對整個(ge)網站(zhan)來說就是在 php.ini 的(de)(de)(de) auto_prepend 和 auto_append 中(zhong)調用(yong)(yong)其中(zhong)的(de)(de)(de)函數。詳細(xi)你(ni)可(ke)以閱讀這(zhe)個(ge)類(lei)的(de)(de)(de)程序,這(zhe)個(ge)程序注釋得很好(hao),作者(zhe)幾乎把什么都告訴(su)你(ni)了。不過使用(yong)(yong)之前,你(ni)的(de)(de)(de) PHP 要(yao)編譯為支持 zlib。
對于 PHP 4.0.4 來說,一個新的解決方案就(jiu)是(shi)使(shi)用 ob_gzhandler,能達到和上面的類一樣(yang)的效果,只要簡(jian)單的在 php.ini 加入下面這句(ju)話就(jiu)可以(yi)了:
output_handler = ob_gzhandler ;
這能讓(rang) PHP 激活輸出緩沖,并壓縮(suo)(suo)所有輸出。如果有什么特(te)殊的理由(you)不想(xiang)讓(rang)所有的內容都壓縮(suo)(suo)輸出的話,可(ke)以采(cai)用在 .htaccess 文件中加入下面(mian)的行,對(dui)對(dui)應目錄下的文件進行壓縮(suo)(suo)。
php_value output_handler ob_gzhandler
也可以直接在(zai) PHP 代碼中加入(ru):
ob_start("ob_gzhandler");
這項壓(ya)縮技術十分有效,但(dan)是對 Netscape Communicator 用(yong)戶(hu)來說(shuo),因為不能(neng)壓(ya)縮圖(tu)形文件,所(suo)以看上去沒有完(wan)整(zheng)的發送,因此必須關閉對 jpeg 和 gif 文件的壓(ya)縮,IE 沒有這個問(wen)題(ti)。
結論:
采用本文所(suo)討論的(de)技術應該能改善你的(de)網站性能,但是需要注意的(de)是:
- PHP 可能不是導致瓶(ping)頸的原因,仔(zi)細檢查其(qi)他原因(例(li)如:數(shu)據庫)
- 你不可能把服務器性能調節到最(zui)高狀態。因此在埋(mai)怨(yuan) PHP 及其緩沖之前,考慮是否該(gai)升級服務器了,或(huo)者采用(yong)動態負載(zai)平衡技(ji)術(那(nei)可是一大筆銀子哦)。
- 不要低估(gu)內(nei)容壓縮,在(zai)你 100 Mb 的內(nei)部網(wang)上(shang)面看到 PHP 應用(yong)的速度(du)提升時,不要忘記使用(yong)調制解調器的用(yong)戶在(zai)哪里埋怨(yuan)你的 100Kb 的 HTML 頁面。
【免責(ze)聲(sheng)明】本文部(bu)分系轉(zhuan)載(zai),轉(zhuan)載(zai)目的在于(yu)傳遞更多信息,并(bing)不代表本網贊同其觀點和(he)對(dui)其真實(shi)性負責(ze)。如涉及作(zuo)品內(nei)容、版權和(he)其它(ta)問(wen)題,請在30日內(nei)與(yu)聯系我們,我們會予以更改或刪除相關文章(zhang),以保證您(nin)的權益!