ZAPAnet総合情報局 > ZAPAブログ2.0 > ファイルを圧縮するmod_deflateの効果

ファイルを圧縮するmod_deflateの効果

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

mod_deflate モジュールは DEFLATE 出力フィルタを提供します。これはサーバからの出力を、ネットワークを 通してクライアントに送る前に圧縮することを可能にします。
先週の金曜日にmod_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 HTTP サーバ
@IT:mod_deflateによるコンテンツの圧縮転送(1/3)

転送量に悩んでいるときは、mod_deflateの設定を見直してみるのも良いかもしれません。
圧縮されているかどうかを確認するときは、下記サイトで確認できます。
Fortune 1000 Research: Top 1000 HTTP Compression Survey

追記

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
素晴らしい圧縮効果と言って間違いなさそうです。