Webページの表示を高速化するポイント

基本的にはYSlowのチェックポイントに従う。

  1. Make Fewer HTTP Requests(無駄なHTTPリクエストが発生していないか?)
  2. Use a Content Delivery Network(CDNを利用しているか?)
  3. Add an Expires Header(キャッシュ制御はきちんとしているか?)
  4. Gzip Components(gzip圧縮は使っているか?)
  5. Put CSS at the Top(CSSはBodyタグよりも前で読み込ませているか?)
  6. Move Scripts to the Bottom(javascriptをの直前にまとめているか?)
  7. Avoid CSS Expressions(CSS Expressionを使ってしまっていないか?)
  8. Make JavaScript and CSS External(javascriptcssファイルを外部ファイルにしているか?)
  9. Reduce DNS Lookups(アクセスするhostの数は適切か?)
  10. Minify JavaScriptjavascriptファイルの最小化を行っているか?)
  11. Avoid Redirects(リダイレクトは必要最小限か?)
  12. Remove Duplicate Scripts(同じスクリプトを2回ダウンロードしていないか?)
  13. Configure ETags(ETagが適切に設定されているか?)

この中ですぐに意味が分からなかった物をメモ。

Use a Content Delivery

調査中。

Add an Expires Header

何日キャッシュするといいよってクライアントにアドバイスする為のHTTPヘッダ。
キャッシュを掛けたいファイルへのアクセスにスクリプトを挟んでHTTPヘッダを追加してもいいし、Apacheモジュールのmod_expiresを使ってもいい。
mod_expiresを使う場合は以下の手順(Apache2.2.8で設定した時の手順)。

  1. mod_expiresをインストールする。
  2. sudo a2enmod expires
  3. /etc/apache2/mods-enabled以下にexpires.confを作り、[テキスト1]の内容を記述する。
  4. sudo /etc/init.d/apache2 force-reload

[テキスト1]

LoadModule expires_module modules/mod_expires.so
ExpiresActive On
ExpiresDefault "access plus 3 days"

ちなみにCoreServerはmod_expiresが無いので諦めるか、静的ファイルへのアクセスにHTTPヘッダ編集用のスクリプトを挟む。
他に方法あったら教えてくださいm(_ _)m

Reduce DNS Lookups

Host名の解決には約20〜120ミリ秒程の時間が掛かる。
つまりリソースを取得するのに複数のHostにアクセスしたらそれだけ名前解決に時間が掛かってしまう。
だからと言ってリソースの取得先Hostを1つにしても返って逆効果になることもある。
目安としては2〜4つ程の範囲に収めると良いらしい。
もちろん上記範囲外の方がリソースの取得に時間が掛からないのなら上記範囲にこだわる必要は無い。

Configure ETags

Apacheが勝手に生成する、ファイルの状態を比較するための識別子。

  1. 最終更新日時
  2. ファイルサイズ
  3. Apacheが勝手に決めた』ファイル固有の識別子

などから成る。
この識別子がクライアントからHTTPヘッダーに乗せて送られた場合、Apacheは「200 OK」か「304 Not Modified」のどちらを返すかを判断するのに使用する。
サーバが1台の場合はデフォルトのETag生成の設定でも問題は無いが、複数台のサーバを用いた分散システムを構築した場合、上記3番のファイル固有の識別子の影響でETagによるキャッシュ判断が全く付かなくなる事がある。
従ってETagは無しにしてしまうかファイルサイズのみから生成するようにすると良い。