[.htaccess] ファイルを圧縮して サイトを高速化

サイトの表示が遅い場合セッションごとの表示ページ数が少なかったり、そもそもロードが終わる前に離脱するなど、いい事は全くないでしょう。

Googleが提供するDevelopersツールで“PageSpeed Insights”というのがあり、サイトのパフォーマンスを検証する事ができます。

解析結果により、可能な対策方法などを紹介してくれますが、全てする必要はないでしょう。(対策内容により仕様やデザインを保てなくなる場合があるので)また共用サーバーなどの一部の環境では対策を講じれないものもあります。

今回紹介するのは、画像ファイルやhtmlファイル、CSSやJavascriptなどをサーバー側で圧縮し、ロード時間を短縮する方法を紹介します。

“mod_deflate”で圧縮して転送量を減らす

mod_deflateはファイルを圧縮して転送量を減らすことで高速表示を可能にするApacheモジュールです。
転送量が減るりサイトの読み込みが早くなる反面、サーバーのCPUの処理は増えるため、ボトルネックがCPUの処理能力の場合は逆にレスポンスが低下するので少し注意が必要。

そのため導入後のリソースの監視と速度測定をするのがベスト。
最近の高速なCPUであればどちらかと言えば回線がボトルネックになるのでほとんどの場合は”mod_deflate”の導入によって高速化が見込めます。

基本的な書き方

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html
</IfModule>

「IfModule」でモジュールを読み込みます。
「SetOutputFilter」でモジュール「DEFLATE」を指定。
「AddOutputFilterByType」で圧縮を有効にするコンテンツの「MINIタイプ」を指定します。

下記のようにMINIタイプはスペース区切りで連続して記述する事も華能ですし、1行ごとに記述する事もできます。

#1行ごとに記述する場合
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html

#連続して記述する場合
AddOutputFilterByType DEFLATE text/plain text/html

実際に使う際の記述例

mod_deflateは多くのサーバで運用されており有効な設定が確立されています。
手っ取り早く有効にしたい場合は下記の記述をコピーして利用する事で高速化を実現できます。

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE

#画像は再圧縮しない
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI _\.utxt$ no-gzip

#ファイルを圧縮
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
</IfModule>

5~6行目:画像はアップロード前に圧縮してしまい、Apache側では圧縮しない。CPUの使用を極力減らすため。
9~18行目、htmlやcssなどは圧縮してしまう。

設定が反映されているか確認する方法は「Chrome」の場合
Developerツールを開き「Network」タブをクリック。
表示されているファイルをクリックするとレスポンスヘッダが確認できます。
ファイルが表示されていない場合は更新すると表示されます。

Response Headers欄に「Content-Encoding:gzip」とあれば正常に圧縮されています。
表示されていない場合は圧縮されていません。

サーバによっては「httpd.conf」で既に有効になっている場合もあります。
逆ににmod_deflateモジュールを読み込んでいないサーバの場合は[.htaccess]で有効にしても圧縮されません。

サーバーの会社のドキュメントを確認するか、サポートに[mod_deflate]が使用できるか確認してみましょう。
とりあえず[.htaccess]に記述してみるのもいいかと思います。

Apacheはモジュールの組み合わせで動作しています。モジュールの種類はさまざまで、仮想ディレクトリ機能(mod_alias)やユーザーディレクトリ(mod_userdir)といった基本的な機能もモジュールとして実装おり、このような形態で実装されているおかげでサイト運営者は不要な機能を切り離してプログラムを軽量化する事ができます。
プログラムのサイズを小さくする事により、実行パフォーマンスに少なからず影響を及します。
プログラムを読み込んで保存するメモリ容量が小さく済む。

余計なロジックを通過しないことで、CPUの計算時間も短縮できる。

メリットは小さなことですが、不特定多数から同時実行されるApacheでは、その同時実行数分の差が出てしまう。
不必要なモジュールを削除する事は、サイトの高速化の重要なチューニングの1つです。

コメントを残す

メールアドレスが公開されることはありません。