2010年6月14日 星期一

啟用壓縮網頁提高傳輸效能 -- Linux, Apache, gzip, mod_deflate

Apache 1.x 與 Apache 2.x 的版本說明

Apache 1.x 系列沒有內建網頁壓縮技術,所以才用 mod_gzip 的。
Apache 2 官方在開發的時候,就把網頁壓縮考慮進去,內建了 mod_deflate 這個模組,所以 Apache 2 就不需要使用到 mod_gzip,但者運作的原理頗為類似。
啟用 mod_deflate 這個網頁壓縮的模組,功能和效率和 mod_gzip 是差不多的,甚至還好一些,且不需要再另外找 mod_gzip 模組,apache 2 就有內建,將模組前面的註解拿掉就可以使用。


實作方法 -- Apache 2

啟用網頁壓縮後,所消耗的頻寬流量便下降許多,可以同時提供給更多人瀏覽頁面的頻寬資源,考量本站使用的文件格式後,實作的方法如下:


在 http.conf 檔案裡有關載入模組的地方,加上這一行:

LoadModule deflate_module modules/mod_deflate.so


接著,在http.conf檔案後面,加上這一段:
DeflateCompressionLevel 9
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
AddOutputFilter DEFLATE js css


這樣的作法可以壓縮一般網頁中會用到的 html、xml、php、css、js 等格式檔案輸出,雖然會佔用掉伺服器處理器的一點點處理器時間,瀏覽者在接收網頁資料時也會消耗極短暫的一點點處理器時間(短到使用者不可能察覺),不過卻可以大幅減少資料傳輸量,減少網路頻寬被吃掉的情形。



說明
  • DeflateCompressionLevel 預設可以採用 6 這個數值,以維持耗用處理器效能與網頁壓縮品質的平衡。
  • DeflateCompressionLevel 9 是指壓縮程度的等級,從 1到 9,9 是最高等級。據了解,這樣做最高可以減少八成大小的傳輸量(看檔案內容而定),最少也能夠節省一半
  • 至於已經是壓縮過的圖片格式如 jpg,音樂檔案如 mp3、壓縮檔如 zip 之類的,就可以不需要再壓縮了,因為這種檔案你一開放伺服器傳輸時壓縮,處理器時間會跑不完。


檢查測試方式


根據官方的測試數據,200KB 的網頁依據不同 gzip 等級的壓縮比例為

Gzip level 1 0.593
Gzip level 6 0.586 (預設值)
Gzip level 9 0.585

由以上數據可知,大於 1 以後的壓縮效益是很低的,且會消耗伺服器資源。因此,他們強烈建議設定成 1,gzip 預設是 6,建議用 1 就好,用 9 對伺服器負載會重,人少沒感覺,人一多就會伺服器負載就重多了。


其它可能衍生的問題:
開啟 apache2 的 mod_deflate 來幫忙壓縮網頁提高傳輸效能 但有些 js 會出現問題:
under firefox 2.0 --->
Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [ nsIXMLHttpRequest.open]

這時候你的java script 需要改寫一下才行,壓縮畢竟還是會影響到一些code。


備註說明:

微軟 Window 伺服器的 IIS 平台,IIS5 得搭配外掛的模組才能實現壓縮功能,IIS6、IIS7 則有內建,但壓縮的效能都沒有 Apache 系列好就是了。


文章參考來源:

沒有留言: