【この記事の所要時間 : 約 5 分】
フロントエンドのパフォーマンスチューニングで、やっぱり気になるのが、gzip圧縮をして転送量を減らすこと。圧縮していないので、以下のように YSlow では、F という最低のステータスになっていた。
F 4. Gzip components
これではいけないと、gzip圧縮について調査してみることにした。
mod_deflateを利用してHTTPレスポンスをgzip圧縮
Apache2.0, 2.2系統ならmod_deflateを利用することでレスポンスの圧縮が可能です。ちなみにApache2.2系からはmod_filterがどうも推奨されているようなのですが、まとまった情報が少なかったので、今回はmod_deflateを利用してみることにします。
ほんの少し手を入れてあげるだけでグーンと効果があるので、mod_deflateをまだ試していないWeb屋さんは、ぜひ検討をば。もちろん圧縮についてはCPUを食うので、現状でWebサーバのCPUリソースを結構消費している場合は要検討ですよ。
とのことで、mod_deflateを使うメリットとして転送量の削減があるが、デメリットとしては、CPUの負荷増加ということがあるみたい。
ファイルを圧縮するmod_deflateの効果
データを圧縮する前と比べて、2/3近く転送量が軽減されたことがわかりました。
当然、クライアントにデータを送る前にサーバー側で圧縮処理を行っているため、CPUの負荷は多少上がっています。ですが、負荷上昇により体感的な処理速度の差が感じられたかというと、圧縮前と圧縮後で特に違いは感じられませんでした。
つまり、大した苦労もなく、転送量が1/3程度になったということです。このサーバーでは、静的・動的に関わらず、ほとんどがテキスト系のコンテンツで構成されているため、その効果も大きかったと思われます。
サイトによって、CPUの負荷<転送量軽減 というケースで一番よさげ。画像ばっかりのサイトではあんまり意味ない。
Webサイトの高速化 ルール4 コンポーネントを圧縮しよう!
gzip による圧縮はだいたい70%程度、レスポンスのサイズを減らします。今日のインターネットトラフィック上で使用されているブラウザの90%はgzipをサポートしています。Apahceを使用しているのなら、gzipのモジュール設定はそのバージョンによります。1.3系ならmod_gzipを、2系ならmod_deflateを使用して下さい。
だいたい70%くらい転送量が減るとのこと。
結構大きいね。
設定方法などは以下の記事を参考に。
@IT – mod_deflateによるコンテンツの圧縮転送
すでに、httpd.confでモジュールの読み込みはされていたので、追加で設定したのが、以下。画像などが意味なく圧縮されないように圧縮するファイルタイプを限定して設定した。
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rdf+xml
効果をYSlowでみてみると・・・・
21.4K →5.8K
となり、73%減少した!
以下のサイトでも圧縮されているかどうかチェックできる。
Compression Check
圧縮されていない場合は以下のような結果になる。
Compression status: Uncompressed
うまく圧縮されていれば、以下のようになる。
Compression status: Compressed (gzip)
ちなみにYahooでは、gzip圧縮のデメリットであるCPU負荷が高くなる点に考慮して、CPUのアイドルが10%を切るとmod_gzipがオフになるという仕組みを導入してるらしいです。
CPU 負荷にあわせて mod_deflate のオン / オフ切り替えはできないか?
さすがですな。
以下、参考までに。
apacheにおいて同時接続数(MaxClients)をいくつに設定すべきか?
インプレスジャパン
売り上げランキング: 41,679