ファイルを圧縮するmod_deflateの効果
2007年03月28日 プログラミングTIPS
Apacheにmod_deflateを組み込み、サーバーからの転送量がどのように変わるかを調べてみました。
mod_deflateとは、クライアントにデータを送る前にサーバー側でコンテンツを圧縮してから送信する機能のことです。
その前後の転送量は以下のグラフのようになりました。

mod_deflateとは、クライアントにデータを送る前にサーバー側でコンテンツを圧縮してから送信する機能のことです。
Apache モジュール mod_deflateについて先週の金曜日にmod_deflate機能を有効にしました。
mod_deflate
モジュールはDEFLATE
出力フィルタを提供します。これはサーバからの出力を、ネットワークを 通してクライアントに送る前に圧縮することを可能にします。
その前後の転送量は以下のグラフのようになりました。

mod_deflateの効果
上のグラフから、データを圧縮する前と比べて、2/3近く転送量が軽減されたことがわかりました。当然、クライアントにデータを送る前にサーバー側で圧縮処理を行っているため、CPUの負荷は多少上がっています。
ですが、負荷上昇により体感的な処理速度の差が感じられたかというと、圧縮前と圧縮後で特に違いは感じられませんでした。
つまり、大した苦労もなく、転送量が1/3程度になったということです。
このサーバーでは、静的・動的に関わらず、ほとんどがテキスト系のコンテンツで構成されているため、その効果も大きかったと思われます。
今までは、HTMLファイルの字下げ(タブや半角スペースの連続)を削除してまで、転送量を削減する努力をしていました。
HTMLファイルの字下げ(タブや半角スペースの連続)の容量は意外とバカになりません。
字下げを全て削除しただけで、44KBから40KBへと1割削減できたりするページもありました。
「たった4KB」と思うかもしれませんが、つもりつもると「1TBから0.9TB」へ削減できることを意味しています。
ですが、このような地道な努力をしなくても、コンテンツ自体を圧縮してしまえば簡単に転送量を削減できたようです。
mod_deflateを有効にするだけで、「1TBから0.4TB」程度まで削減できそうです。
mod_deflateを有効にする方法
例えばApache2.0系では、httpd.confに以下のような記述を追加して再起動すればmod_deflateが有効になります。LoadModule deflate_module modules/mod_deflate.so詳しくは、下記サイトで解説されています。
<Location />
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI\.(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
</Location>
転送量に悩んでいるときは、mod_deflateの設定を見直してみるのも良いかもしれません。
圧縮されているかどうかを確認するときは、下記サイトで確認できます。
追記
apacheログ解析ソフト「Webalizer」を用いて、去年12月から今年5月までの半年間の各月間データを取りました。年月 | ページビュー数 (Pages) |
ユニークユーザー数 (Visits) |
転送量 (KBytes) |
---|---|---|---|
2006年12月 | 7683482 | 1051515 | 214305505 |
2007年 1月 | 20556492 | 4537585 | 582919257 |
2007年 2月 | 16179686 | 5485717 | 518669129 |
2007年 3月 | 14252646 | 5055221 | 329808172 |
2007年 4月 | 10801620 | 3883759 | 89555142 |
2007年 5月 | 11891897 | 4245294 | 96289979 |