Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

Webサイトをスピードアップさせる13のルール

元ネタは、Yahoo! DEVELOPER NETWORKの記事です。

全体的にWebアプリケーション自体ではなく、それ以外のレイヤでどうすればいいか?みたいな話になっています。
で、早速ざっくりと訳してまとめてみました。間違いがあれば指摘してください ;-)

1. HTTPリクエストの回数を減らす

レスポンス時間の80%はフロントエンドで費やされるので、画像やスタイルシートjavascriptFlashなど、ページに含まれる部品の数を減らす。以下、具体的な方法。

<img src="data:image/gif;base64,R0lGODdhMAAwAPAAAAAA..." alt="hoge">
  • ファイルを結合する:javascriptファイルなどを1つにする
    • 開発時は分割し、リリース時やに結合する方法もありかも知れませんね

2. 充分な帯域を持つネットワークを使う

まあ、使えるもんなら使ってますが。。。(^^;

3. Expiresヘッダを加える

ブラウザやProxyのキャッシュをうまく利用して、HTTPリクエストの回数を減らす。

<?php
header("Expires: “ . gmdate("D, d M Y H:i:s", time() + 3600) . " GMT");
header("Cache-Control: max-age=3600");

4. Gzip圧縮する

HTTPレスポンスサイズを圧縮する

5. CSSをHTMLのTOPに持ってくる

CSSがHTMLの最後にあるとブラウザが再レンダリングする必要が出てくるので、結果的にパフォーマンスが悪いイメージをユーザーに与えてしまう。また、再レンダリングされなかったりすると、真っ白なページが出てしまうので、早めに読み込ませるようにする。

6. スクリプトの読み込みはHTMLの最後の方に記述する

大きいファイルのダウンロードを並列で行わせるため。ただし、容易ではない。

7. CSS中の「式」を避ける

CSS中の「式」が評価される回数を減らす

  • 以下のようなもの
background-color: expression( (new Date()).getHours()%2 ? "#B8D4FF" : "#F08A00" );

8. JavaScriptファイルとCSSファイルを外部ファイルにする

複数のHTMLで同じスクリプトCSSを使っている(使い回している)のであれば、大きな利点になる

9. DNSルックアップの回数を減らす

ちょっと読み取れなかったんですが、HTML内に記述されるホスト名の数を減らすことで、クライアント側のDNSルックアップの回数を減らす、ということでしょうかね。

10. JavaScriptを小さくする

javascriptファイル自体をgzip圧縮してしまう

11. リダイレクトを避ける

これは想像できますね :-)

12. 重複するスクリプトを削除する

これも想像できますね :-)

13. ETagの設定を行う

ETagはコンテンツのキャッシュ制御機構の1つ。HTTPレスポンスヘッダに含まれる。ここで、

  • Apache:inode-size-timestamp
  • IIS:Filetimestamp:ChangeNumber

からETagヘッダの値を作成するが、httpdが複数台存在する場合、ETagの値が異なるため、ステータス304を返さない場合がある。その場合、

FileETag none

を追加すると良い。

追記(2007/08/02 17:31)

この元ネタって、先ほど米Yahoo!が公開したYSlowの説明ページだったんですね。

もうちょっと探っていくと、id:i_ogiさんのエントリが。。。

オリジナルは「13」ではなく「14」とのこと。そういうことかぁ。。。なるほど〜。今頃気づいたorz
折角なので、YSlow入れてhttp://www.doyouphp.jp/に対してやってみました。

「2.Use a CDN」はホントに使えるもんなら使ってますが。。。(^^; 「9. Reduce DNS lookup」は上で書いた通り、1つのページを表示するのにいくつlookupする必要があるか?ということのようです。まあ、外部のjavascriptとかいろいろ貼り付けてたりするので仕方ないですねぇ。。。
また、日本語訳については、


[2007.07.29 追記] パフォーマンスチューニングBlogさんで翻訳が開始されたようなので、YSlowの判定結果と翻訳を付き合わせれば日本語でも改善作業ができるようになるかも。

だそうです。