Apache に設置するコンテンツを gzip 圧縮することで、どのくらい負荷が軽くなるものか試してみた。今回は index.html を圧縮してみたが、当然JSやCSS等もイケる(※)。実験サーバ環境は諸事情により非公開。
※画像もgzip圧縮できなくもないが、既に画像フォーマットそのもので圧縮がかかっているので意味が無い。テキスト形式のファイルのみ圧縮をかけるのが一般的。
測定に用いるコマンド
$ ab -n 100 -c 10 -H "Accept-Encoding: gzip,deflate" http://xxxx/
リクエスト数100、同時接続数10。圧縮コンテンツを受け付けることをサーバに伝えるため、Accept-Encoding ヘッダを付与する。
圧縮前
ファイル構成
- web_folder
- index.html … 1MBのテキスト (とりあえず円周率100万桁)
- .htaccess
.htaccess
.htaccess
DirectoryIndex index.html
測定結果
$ ab -n 100 -c 10 -H "Accept-Encoding: gzip,deflate" http://xxxx/
Time taken for tests: 9.524 seconds
Total transferred: 112207900 bytes
リアルタイム圧縮
コンテンツはそのまま設置するだけなので楽。Apacheが圧縮責務を負うため、ややCPU負荷が上がる。
ファイル構成
- web_folder
- index.html … Apacheが勝手に圧縮してくれるため、設置するファイルは無加工.
- .htaccess
httpd.conf
httpd.conf
# 以下2行が必要.
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
.htaccess
.htaccess
DirectoryIndex index.html
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|ico)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
測定結果
$ ab -n 100 -c 10 -H "Accept-Encoding: gzip,deflate" http://xxxx/
Time taken for tests: 5.616 seconds
Total transferred: 54302600 bytes
円周率というランダムなコンテンツのため、それほど圧縮率は良くない。容量が半分になる程度。総時間も半分近くになった。
事前圧縮
コンテンツをあらかじめ圧縮しておくことでApacheの圧縮責務がなくなるため、負荷は当然軽くなる。
ファイル構成
- web_folder
- index.html.gz … あらかじめ gzip コマンドで圧縮しておく.
- .htaccess
htaccess.conf
htaccess.conf
# 普通は既に有効になってるはずだが、一応これが必要.
LoadModule rewrite_module modules/mod_rewrite.so
.htaccess
.htaccess
DirectoryIndex index.html.gz
RewriteEngine on
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule .+ %{REQUEST_URI}.gz
<FilesMatch "\.html\.gz$">
ForceType text/html
AddEncoding x-gzip .gz
</FilesMatch>
測定結果
$ ab -n 100 -c 10 -H "Accept-Encoding: gzip,deflate" http://xxxx/
Time taken for tests: 4.731 seconds
Total transferred: 54302800 bytes
リアルタイム圧縮に比べると圧縮フェーズが無いため当然軽い。
以上
CPU負荷値を計測していないので雑だが、処理時間を見る限り、リアルタイム圧縮でも割とイケるな、という印象。活用していきたい。
ファイル数が極少数の場合は事前圧縮も活用していきたい。