| 導購 | 订阅 | 在线投稿
分享
 
 
 

PHP的優化,緩沖,壓縮實際的解決方案

來源:互聯網  2008-12-22 08:09: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 oendOptimizer.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 頁面。

本文提出了實用的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 oendOptimizer.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 頁面。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有