Steve Souders - High Performance Web Sites

Average Web Page Size Triples Since 2003によればこの5年間で平均的なWebページのサイズは3倍以上に増えており、ページに含まれているオブジェクトの数も2倍程度に増えているという。ブロードバンドの普及している地域では問題にならないだろうが、ダイヤルアップといったナローバンドを使っている場合にはインターネットは以前にも増して遅くなったように感じていることになりそうだ。

ナローバンドでも快適にページが表示できるようにしたり、ページの表示速度をより高速化するにはキャッシュの活用が有効だ。Average Web Page Size Triples Since 2003によれば現在の平均的なページは50をこえるリソースを含んでいるという。キャッシュを有効活用して50のHTTPリクエストが削減できれば一度訪れたページの表示速度は高速になる。そこでSteve Souders氏の紹介しているRevving Filenames: don’t use querystringに注目したい。キャッシュを効果的に使う方法と禁忌事項が紹介されている。Steve Souders氏は書籍"High Performance Web Sites"の著者であり、Yahoo!においてYSlowの開発を実施していた人物。現在ではGoogleでWebパフォーマンスなどに関連した業務を担当している。

まず基本的な設定として、Apache HTTP Serverの設定にキャッシュ有効化を追加する方法が紹介されている。この例であればGIF、JPEG、JavaScript、CSSリソースにアクセスがあってから10年間はキャッシュが有効になる。

特定のリソースのキャッシュを長めに設定する例 - Revving Filenames: don’t use querystringより抜粋

このままではリソースの内容を変更してもキャッシュ期間はクライアント側で更新されなくなってしまうため、ファイル名にバージョン番号を含めたり、クエリを付加することでリソース変更に対処する。ファイル名であればたとえば「mylogo.1.2.gif」のようにバージョン番号を含めればいいし、クエリであれば「mylogo.gif?v=1.2」のようにすればいい。同氏はこの手法を"Revving Filenames"と呼んでいる。

ファイル名変更ではSquidのキャッシュが有効になっている - Revving Filenames: don’t use querystringより抜粋

クエリ付加ではSquidのキャッシュが有効にならない - Revving Filenames: don’t use querystringより抜粋

同氏はこれまでこの2つの方法にはそれほど性能の差は見られないとしていたが、Jacob Hoffman-Andrews氏との議論を通じて「mylogo.1.2.gif」のようにファイル名を変更する方法の方が効果的であることに気がついたという。「mylogo.gif?v=1.2」のようにクエリを付加する方法ではSquidなどのプロクシにキャッシュ効果がみられない。ファイル名を変更する方法であればSquidはキャッシュとして機能するが、クエリが付加されているとキャッシュが機能しない。これでは"Revving Filenames"としては意味がないというわけだ。

もちろんSquidやほかのプロクシであっても設定を変更すれば、クエリが付加されている場合でもキャッシュが有効になるが、キャッシュされては困る場合にもキャッシュが有効になってしまう弊害や発生する可能性があり、また多くの場合でデフォルト設定が使われることから標準的な手法として採用するには問題があるという側面がある。キャッシュを有効にする場合にはファイル名にバージョン番号を含める方法が効果的というわけだ。ページの高速化に取り組んでいる場合にはRevving Filenames: don’t use querystringを検討してみるとよさそうだ。