YSlow対策でmod_expiresを利用してHTTPレスポンスヘッダにExpiresを追加する

  • 2007年7月31日 20:20
  • apache

YSlowの評価に対する改善シリーズ、その2です。mod_deflateを利用してHTTPレスポンスを圧縮させる方法はこちらから。

前回で、総合ポイントが「F」だったサイトをレスポンス圧縮することで、総合ポイントを「D」にまで上げることができました。今回は、残りの「F」項目の中の「Add an Expires header」についての処理を行いたいと思います。

YSlowの公式サイトによると、「リッチサイトはCSSやらJSやら多くのファイルをロードするために、リクエスト回数も増えちゃうよね。でも変更が少ないファイルについてはExpiresヘッダを追加することで、ユーザにキャッシュさせ、リクエスト回数を減らすことができるよ(大雑把な意訳)」と、あります。つまり、Apache側でExpiresヘッダをレスポンスに追加することで、「このファイルは、xx日までは再リクエストしなくてもいいよ」なルールを決めることができます。このルールを追加することができるのが、mod_expiresになります。

Expiresのルールは各サイトのポリシーにもよると思いますが、基本的には静的なファイル、更新されることがほとんど無いファイルがそれにあたります。具体的に言えば、gif/jpgなんかの画像ファイル、JS、CSSファイルなんかがそれに当たると思います。とは言え、いきなりガッツリとキャッシュさせてしまうのも、正直不安なところがあります。なので、最初はキャッシュさせる期間は少なめにして、問題なさそうなのを見計らいながら段階的に期間を延ばしていくのがベターかと思います。

具体的にmod_expiresの設定を行う場合は、次のようになります。

例のようにhttpd.confを編集します。まずは「1日分」だけキャッシュさせることにします。

LoadModule expires_module modules/mod_expires.so

ExpiresActive On

ExpiresByType text/css "access plus 1 days"
ExpiresByType application/x-javascript "access plus 1 days"
ExpiresByType image/jpeg "access plus 1 days"

1行目は、mod_expiresをLoad、3行目でExpiresヘッダの追加を有効にしています。5行目以降はMIMEタイプでExpiresヘッダを追加させるファイルを指定しています。今回は出力されるHTMLは動的なサイトを対象としていたため、Expiresヘッダを追加するファイルはCSS、JS、JPGファイルのみにしています。これらの設定を追加した上で、apacheをリスタートさせ、YSlowで測定してみると

D 3. Add an Expires header These components do not have a far future Expires header: (7/31/2007) http://xxxxxx.jpg

と、なり、Expiresヘッダが追加されたことに一応の評価はしてくれたものの「もっと頑張れないのか??」と問い詰められ、「D」の評価をされます。うーん、1日だとどうも短いようです。では3日ではどうでしょうか?httpd.confを修正してみます。

ExpiresByType text/css "access plus 3 days"
ExpiresByType application/x-javascript "access plus 3 days"
ExpiresByType image/jpeg "access plus 3 days"

これで、リスタートをかけてみます。すると

A 3. Add an Expires header

と、いうわけで、Expiresヘッダの項目について、晴れて「A」評価になりました!。また、全体の評価もこれで「D」から「B」に格上げされました!どうもYSlowのExpiresの評価基準はこのあたりにあるようです。

このように、mod_deflateの場合と同様に、mod_expiresを有効にして、少しの手間でグっとリクエスト数を減らすことができます。特に画像を多く利用しているサイトでしたら、このテクはかなり有効かと思います。ちなみに、「あ、やっぱファイルに対して修正をかけたい!!」なんて場合はどうすればいいのでしょうか?ユーザにリロードを促さないとダメなのでしょうか?こんな場合はQueryStringを追加してあげることで、別のファイルだと強制的に見なしてあげればOKです。たとえば、hoge.jpgを再読み込みしてもらいたいときは

<img src="./images/hoge.jpg" alt="hoge" />

<img src="./images/hoge.jpg?070731" alt="hoge" />

の、ように「?任意の文字列」(QueryString)をファイル名に追加することで、強制リクエストを促すことができます。これもなかなか使えるテクなので知っておいて損ではないと思います。(FirefoxでFlashのキャッシュが残っちゃう場合なんかによく利用していました)

なお、今回は次のサイトを参考にさせていただきました。参考にさせていただいたサイトの方々、どうもありがとうございました。

関連広告

Trackbacks:0

TrackBack URL for this entry
http://blog.katsuma.tv/mt-tb.cgi/85
Listed below are links to weblogs that reference
YSlow対策でmod_expiresを利用してHTTPレスポンスヘッダにExpiresを追加する from blog.katsuma.tv

Home > apache > YSlow対策でmod_expiresを利用してHTTPレスポンスヘッダにExpiresを追加する

Search
Feeds

Return to page top