Thursday, March 19, 2009

啟用Apache2 的mod_deflate(gzip)來壓縮網頁提高傳輸效能

啟用Apache2 的mod_deflate(gzip)來壓縮網頁提高傳輸效能
今天為了讓Apache 2能夠啟用網頁壓縮,本來是找有經驗的朋友幫忙看用mod_gzip來壓縮會不會比較好,畢竟gzip壓縮網頁輸出是很多人都在採用的技術。

後來翻Apache 2 Module mod_deflate 資料才發現,原來很多人用mod_gzip其實是因為Apache 1.x系列沒有內建網頁壓縮技術,所以才去用的。Apache 2官方在開發的時候,就把網頁壓縮考慮進去,內建了mod_deflate這個模組,所以Apache 2就不需要使用到mod_gzip,但2者運作的原理頗為類似。

啟用mod_deflate這個網頁壓縮的模組,功能和效率和mod_gzip是差不多的,甚至還好一些,且不需要再另外找mod_gzip模組,apache 2就有內建,將模組前面的註解拿掉就可以使用。

yblog.org啟用後,所消耗的頻寬流量便下降許多,可以同時提供給更多人瀏覽頁面的頻寬資源,考量本站使用的文件格式後,實作的方法如下:
在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 9是指壓縮程度的等級,從1到9,9是最高等級。據了解,這樣做最高可以減少8成大小的傳輸量(看檔案內容而定),最少也能夠節省一半。

DeflateCompressionLevel 預設可以採用 6 這個數值,以維持耗用處理器效能與網頁壓縮品質的平衡。

至於已經是壓縮過的圖片格式如jpg,音樂檔案如mp3、壓縮檔如zip之類的,就可以不需要再壓縮了,因為這種檔案你一開放伺服器傳輸時壓縮,處理器時間會跑不完。

有關這個mod_deflate的效能,這篇文章Apache 2 mod_deflate Benchmark分析得很好,也值得參考。

要檢查加上模組的成果,可以馬上透過這個網站來看看壓縮效率如何Real-Time Compression Check(已經失聯),我們來改用這個網站Check HTTP Compression來檢查。

以優格網首頁為例,25445 bytes變成7828 bytes,壓縮後的比例約省下了70%。而以永遠的真田幸村為例,首頁從69045 bytes變成18001 bytes,節省了74%,傳輸速度快了的3.8倍,不過處理速度沒有變慢。

至於Lighttpd這套也很紅的網頁伺服器軟體平台,也支援mod_deflate來壓縮網頁提高傳輸效能。

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


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

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

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

220.130.142.* | 標記為廣告 | 回應此篇迴響
名稱
電子郵件
網址
記住我?

>>由 ivan 發表於 1:25, Jan 2, 2007
用越多壓縮越多,不過這樣太高確實會造成伺服器負擔過高,看不同網站主機的情形會有差異。

我自己之前的主機影響並不大,但新用的主機自己測試過會差一點點,如果瀏覽量很大的話會受到影響比較高。

208.97.143.* | ivanusto at gmail dot com | 標記為廣告 | 回應此篇迴響
名稱
電子郵件
網址
記住我?

>>由 愛上生活網 發表於 18:32, Oct 21, 2008
開啟 apache2 的 mod_deflate 來幫忙壓縮網頁提高傳輸效能 但有些js出問題了...

under firefox 2.0 --->
Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [ nsIXMLHttpRequest.open]
218.20.63.* | i-club at live dot cn | 標記為廣告 | 回應此篇迴響
名稱
電子郵件
網址
記住我?

>>由 ivan 發表於 0:11, Oct 26, 2008
這時候你的java script 需要改寫一下才行

壓縮畢竟還是會影響到一些code
208.97.143.* | ivanusto at gmail dot com | 標記為廣告 | 回應此篇迴響

No comments: