[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 編程技術 > Java > 正文
PHP的優化,緩沖,壓縮
本文出自:http://www.freelamp.com 作者: 徐永久(albertxu@bigfoot.com) (2001-08-27 08:00:01)
 本文對 PHP的優化,緩沖,壓縮 提出了實際的解決方案
作為流行的 Web 編程語言, PHP 的最大優勢就是速度。 PHP4 已經在這方面做的非常好了,你幾乎找不到比它
更快的腳本編程語言了。但是如果你的應用負荷很大,而帶寬又比較小,或者有其他的瓶頸影響你的服務器性能,
那,你不妨試試筆者為你開出的幾個藥方,看看是否靈驗。


一、代碼優化

一談到代碼優化,或許你想到的就是整齊明了的代碼,但是本文的意思卻不是在此,因為如果要尋求速度的話,
就要對PHP 源碼作相應的調整。一般說來就是去掉多余的注釋,讓代碼不可讀。但是這對一個具有良好素養的
程序員來說,簡直就是不可思議的。好在Zend Technologies 公司發布了 Zend 優化引擎可以幫助你做到這一點。
它現在是免費的,但是你必須遵循 Zend Optimizer 許可。這個產品可以對引擎產生的中間代碼進行優化。

安裝這個引擎比較簡單,下載對應平台的版本以,解開壓縮文件,然在 php.ini 文件裡面加上下面兩行,
重新啟動 Web 服務器,就搞定了。

zend_optimizer.optimization_level=15
zend_extension="/path/to/ZendOptimizer.so" 
zend_loader.enable=Off

如果是 Win32 平台的話就應該是:

zend_optimizer.optimization_level=15
zend_extension_ts="C:\path\to\ZendOptimizer.dll"
zend_loader.enable=Off

啊!沒有搞錯吧?怎是三行?其實第三行是可選的。因為看起來把 zend_loader 關掉能提高一點速度,因此
值得把這第三行放到 php.ini 。需要注意的是,關掉的前提條件是你沒有在使用 Zend 加密程序。


二、緩沖

如果想要更進一步提升速度,我們就需要考慮採用緩沖技術了。有一些可選的解決方案,包括 Zend Cache (測
試版本), APC, 以及 Afterburner Cache,另外還有 jpCache 等。

以上這些都是屬緩沖模塊,他們把第一次對 .php 文件請求產生的中間代碼存儲在 Web 服務器的內存中,然
對以的請求返回“編譯好”的版本。因為這樣減少了磁盤讀寫,而且都在內存工作,所以這個過程能顯提
升應用性能,

現成的這類產品比較多,到底選擇誰呢?

Zend Cache 是一款不錯的商業產品,在第一次加載那些很大的 PHP 頁面,你會明顯感受到速度的提升,服務
器會留出更多的資源。可惜這個產品是要花銀子的,但是在有些情形下,你可不要吝嗇這些銀子。

Afterburner Cache 是 Bware Technologies 的產品,目前還處 Beta 版本,看起來似乎和 Zend Cashe 一樣,
但是它不能達到 Zend Cache 那樣好的效果,也不能和 Zend 優化引擎一起工作,但是它是免費的,所以我採用
了這個模塊。

APC (Alternative PHP Cache) 是 Community Connect 發布的又一個免費模塊,看起來似乎可以用生產環境了。


三、Web 內容壓縮

對日益擁擠的網絡來說,節約帶寬就像節約用水一樣是十分值得提倡的。根據IETF 標準,大多數瀏覽器應該支
持使用 gzip 壓縮的內容。也就是說你可以把用 gzip 壓縮的內容發送給瀏覽器,瀏覽器會透明的解壓數據。

mod_gzip 是 Remote Communications 公司推出的免費 Apache 模塊,能把靜態的Web 內容壓縮發送給瀏覽器。
對大多數靜態網頁來說,這個模塊十分合適。盡管
Remotecommunications 公司的人說這個模塊支持所有那些 mod_php, mod_perl,mod 什產生的動態內容,但是
看起來還是不能工作,從 mod_gzip 的郵件列表來看,這個問題估計要到1.3.14.6f 才能解決。

如果要壓縮動態內容的話,我們可以採用class.gzip_encode.php,一個在腳本開始和結束時使用的 PHP 類。對整
個網站來說就是在 php.ini 的 auto_prepend 和 auto_append 中調用其中的函數。詳細你可以閱讀這個類的程序,
這個程序注釋得很好,作者幾乎把什都告訴你了。不過使用之前,你的 PHP 要編譯為支持 zlib。


對 PHP 4.0.4 來說,一個新的解決方案就是使用 ob_gzhandler,能達到和上面的類一樣的效果,只要簡單的
在 php.ini 加入下面這句話就可以了:

output_handler = ob_gzhandler ; 

這能讓 PHP 激活輸出緩沖,並壓縮所有輸出。如果有什特殊的理由不想讓所有的內容都壓縮輸出的話,可以採
用在 .htaccess 文件中加入下面的行,對對應目錄下的文件進行壓縮。

php_value output_handler ob_gzhandler 

也可以直接在 PHP 代碼中加入:

ob_start("ob_gzhandler"); 

這項壓縮技術十分有效,但是對 Netscape Communicator 用戶來說,因為不能壓縮圖形文件,所以看上去沒有完
整的發送,因此必須關閉對 jpeg 和 gif 文件的壓縮,IE 沒有這個問題。


結論:

採用本文所討論的技術應該能改善你的網站性能,但是需要注意的是:

- PHP 可能不是導致瓶頸的原因,仔細檢查其他原因(例如:數據庫)

- 你不可能把服務器性能調節到最高狀態。因此在埋怨 PHP 及其緩沖之前,考慮是否該升級服務器了,或者採用
動態負載平衡技術(那可是一大筆銀子哦)。

- 不要低估內容壓縮,在你 100 Mb 的內部網上面看到 PHP 應用的速度提升時,不要忘記使用調制解調器的用戶
在哪裡埋怨你的 100Kb 的 HTML 頁面。


(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
 

★  樊強制作 歡迎分享  ★