2009/03/31
WEBサイトのパフォーマンスチューニング
ハイパフォーマンスWEBサイトよんだ。まとめ。と個人的雑感
体感速度を向上させる。
体感速度を向上させるためには次の方法が在ります。
- ダウンロード速度の高速化
- 表示しながらダウンロード。
一般的には8秒ルールなどといわれます。昨今のユーザは8秒でも遅いと感じます。YahooやGoogleなどミリ秒単位で表示されるページ増えて、1秒程度でページを閲覧している。
「ダウンロード速度の高速化」は8秒ルールの実現に主眼が置かれるが、キャッシュ、データベースなど限界も多い。また、システム全体を見渡す必要がある。敷居が高い。簡単に早くさせるために、「表示しながらダウンロード」に主眼を置いてチューニングするべきです。
表示しながらダウンロードをプログレッシブダウンロードと呼びます。
しかし表示中にチカチカしたり、コンテンツ位置が移動するのは避けたい。
高速化原則
- JSファイルでdocument.writeしない
- CSSで@importを使わない
- CSSはHEAD内だけに記述する
- JSは</BODY>直前に置く
- JS/CSSとも最小枚数を目指す。
基本ポリシー
- HTTPのコネクション数を減らす
- キャッシュ制御する
- Dom構築・レンダリングを妨げない。
次に画像。
不要な転送を避ける。変化しない画像はキャッシュさせる。
- 画像1枚に一つのURL
- Expiresを必ずつける。
- E-tagは避ける
- 小さい画像はCSSに埋め込む。src="data:BASE64"を使う
- アイコンはpositionをつかう。CSSスプライト
Apacheがデフォルトで付記するのE-tagは、HDDのi-nodeから算出される。サーバーをミラーしたらE-tagが変わる。同じ画像を複数サーバーに分散させてDNSラウンドロビンで分けたのに、E-tagがサーバー毎に変化してキャッシュ制御が大変。制御が手間なのでE-tagは忘れる。
画像が変化することは考えにくいのでかなり大きな値(一年以上でも構わない)にする。
トリッキーな画像でコネクション数削減
- マウスオーバー画像・アイコンはCSSスプライトにする。
.prev_icon {background-position: 0px, 0;} .next_icon {background-position: 16px, 0;} .home_icon {background-position: 32px, 0;}
- インライン画像を使う。imgタグのSRCやCSSのurl()を次のようにする
<img src="data:image/png;base64,TGGAfhafdsghjer984275rpyafh...." />
.icon background-image:url( data:image/png;base64,TGGAfhafdsghjer984275rpyafh....");
HTTPのコネクション数を減らすことで早くなる。負荷が下がる。サーバー台数減らせる。メリットは大きい。
GZIP圧縮する。
mod_deflate(2.2.x)/mod_gzip(1.3.x) を使う。
転送量を減らすと、読込が早くなる。転送が早くなる。
転送量課金されるAmazonS3やAmazonEC2を使う時は必須。料金を抑えられる。
プロキシサーバーがある場合は、Expiresに注意する。
mod_deflateの設定例
<IfModule mod_deflate.c> # 圧縮率1-9 (最小1⇒⇒最大9) DeflateCompressionLevel 6 # 圧縮するもの ( content-typeで指定:JPEGを圧縮しても無意味なんだからね) AddOutputFilterByType DEFLATE text/html text/plain text/xml text/json text/css # DEFLATEの有効化 SetOutputFilter DEFLATE #GZipするブラウザ指定する。きりがない。 #BrowserMatch ^Mozilla/4 gzip-only-text/html #BrowserMatch ^Mozilla/4\.0[678] no-gzip #BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html </IfModule>
deferを使う。
document.writeを使わないJSにはdeferをつける。
IEやOperaだと圧倒的に早くなる。
<script defer="defer" ... />
deferはFirefox非対応。あとレンダリングのタイミングがFirefoxは遅いので要注意。Firefoxは要らない子なんじゃないか
- 19 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGLJ_jaJP318JP318&q=php+DOM EXCEL+ マクロ
- 14 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&q=security.yml++&btnG=検索&lr=lang_ja
- 13 http://reader.livedoor.com/reader/
- 7 http://jp.emeditor.com/modules/mydownloads/singlefile.php?cid=21&lid=171
- 6 http://www.google.co.jp/search?hl=ja&client=firefox&rls=org.mozilla:ja:official&hs=b8C&num=100&q=mysql+auto+increment+0&btnG=検索&lr=lang_ja
- 6 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=smarty+zendframework&num=50
- 4 http://www.google.co.jp/reader/view/
- 4 http://www.google.co.jp/search?hl=ja&client=firefox-a&channel=s&rls=org.mozilla:ja:official&q=zend_db+O/R&btnG=検索&lr=
- 4 http://www.google.co.jp/search?hl=ja&safe=off&client=firefox-a&rls=org.mozilla:ja:official&hs=VwK&q=mysql+auto+increment+alter+table&btnG=検索&lr=lang_ja
- 4 http://www.google.co.jp/search?q=Web+画像+キャッシュさせる&btnG=検索&hl=ja&sa=2