パフォーマンスチューニング

f:id:tenman:20090315105805p:imageYslowというfirefox addin があります
プラグインは、WEBページのパフォーマンスをチェックしてくれます。



blog等をつかってエントリを公開していると、どうしてもレスポンスへの不満が出てきます。



ブログサイトなどで、表示までにやたら時間のかかるものがあります。

アクセスがあるたびに、プログラムを動作させると、プログラムに負荷もかかり表示に時間がかかるようになります。



これは困るので、結果コピーだけを保存しておいて、アクセスがあったらそれを見せる工夫をします。


コピーを表示する事は、簡単な事ですが、ブログなどは、WEBサーバ上のプログラムがページを更新するので、その期限や更新時期を適切に保つ事ができないと、変更が反映されないなどの問題を起こします。

具体的には、編集完了時にコピーを更新するとか、工夫が必要になります。




しかし、これだけだと、負荷の低減にはなっても、夫々のスタイルシートや、画像に、毎回アクセスが発生します。



ブラウザの動きとしては、※1同時接続数を増やしたり、DNSプリフェッチ※2という仕組みを使って、高速表示競争をしているようです。



ブラウザキャッシュが望みどおり動作するようにコントロールできれば、更新期限までの間、クライアントブラウザは、サーバアクセスを行わないで、ブラウザのキャッシュを利用するようになるので、その点についての工夫も大事そうです。
ブラウザのキャッシュ動作を把握した上で、Last-Modifiedヘッダや、expire ヘッダの追加を検討する事も、いいかもしれません。

ただ、一律にブラウザキャッシュを有効にするのは、考え物です。サーバ側で更新しても、ユーザ側が有効期限までアクセスしなかったり、コンテンツの流通に支障をきたしたり、ログイン後の画面がキャッシュされた場合は、情報の暴露になる事もあるかもしれません。

その点で、session_cache_limiter()についてもよく学ぶ必要がありそうだなと、私自身は思います





htmlとしての対応は、Yslowが、アドバイスをしてくれるので、自分のサイトの改善点がどこにあるのか、見つけやすくなります。



とはいっても、高評価をたたき出すためのツールでもなさそうです。


WEB標準等とは、無縁の評価です。
例えば、ajaxで読み込んだファイルが多ければ、評価は落ちます、phpで読み込んだファイルは評価を落とさないかもしれませんが、それはどうでしょうか

また、必ずしも、誰でもがチューニングで出来そうな項目ばかりではありません。mod_expiresなどが使える共有サーバは限られるかもしれません。

よいhtmlのためにやってきた事を、チューニングのために捨て去るのは、一回考えてからにしましょう。

大きなサイズの画像などを、長期間変更せずに利用する。などであれば、GDで読み込んで、expireヘッダをつけるというのもありかもしれませんが、

何か引っかかるものが、あります。
WEB上で動作するブログみたいなプログラムは、もともと、ブラウザの自動的なキャッシュを嫌って、キャッシュしない方向へ、どんどん走ってきてしまって(私だけ、、、)フィルタなどの編集便利グッズをつみすぎて、動作が遅くなり、
キャッシュできるところは、どんどんキャッシュして、動作を出来るだけ早くしましょう。

こういうことでいいのだろうか という自分への問いかけの部分です。

Yslowが最高評価のAを出すのは、google検索結果や、yahooのサイトになります。私たちが簡単にA評価を得られるのは、404file not found 等のページになる

Yslowをグーグルで検索したが、上位のほとんどのサイトは、fランク(最低の評価になる)




ただ、なぜ、※3CSSスプライトなのか等、パフォーマンスを検証していくと、いろいろ自分のサイトについて考えさせられます


環境的に困難な項目もあります。
レンタルサーバレベルでは、.htaccessでexpire属性※4を使ったチューニングは困難な場合もあると思う


PHPを使っているなら、いろいろ試す事はできそうで、以下のように記述する事も出来そうです。
数件チェックしたが、サイトによっては、なぜか、javascriptのエラーが出るような事もりましたので
このスクリプト自体に問題がある可能性もあります。

javascriptライブラリをたくさん使っていたので、出来るだけひとつにまとめようとして以下のようなスクリプトを書きました。
.htaccess AddType application/x-httpd-php .js

<?php
header('Content-type: text/javascript; charset: UTF-8');
header ("cache-control: must-revalidate");
header("Last-Modified: " . gmdate("D, 01 M Y 15:00:00") . " GMT");
$expire = "expires: " . gmdate ("D, t M Y 15:0:0", time()) . " GMT";
header ($expire);
ob_start ("ob_gzhandler");

readfile('prototype.js');
readfile('jquery.js'); 
readfile('jqswitch.js');
readfile('jquery.flatheights.js');

…

ob_end_flush();
?>

私たちが、WEBサイトを作っていくうえで、ブラウザキャッシュをうまく使ったり、同時アクセス数を減らす工夫が常識といわれるときが近づいてきている。


正直に言えば、html自体が考慮すべき事がどんどん増え、WEB標準準拠や、スタイルの初期化や、エージェント対応といった観点からの、多ファイル化、非同期アクセスの多用等、イケイケどんどんと、やれることをやっていく中で、file not foundがAで、今までの苦労が F なのはちょっとショックだけれど、

いずれ、(私にとっての)htmlのあり様は、整理されなくてはいけないと思っていた時だけに、いい機会かも

再表示時の表示に要する時間メモ:

ページ 評価 サイズ sec
What is Plone ? — オープンソースCMS - plone.jp d 221.2k 1.813
Six Apart f 333.9 1.087
f 99.1 1.66
WordPress | 日本語 a 23.7 0.349
FrontPage - PukiWiki-official d 49.4 0.821
YukiWiki b 21 0.187
tDiary.org d 144.6 1.686
Frog CMS - Content Management Simplified | Frog CMS d 106 0.716
Wikipedia f 214.1 4.198