続・鳩丸高速化計画その2・原因調査
2003年12月24日(水曜日)
続・鳩丸高速化計画その2・原因調査
二日間ほど詳細なログを取って調査した結果、遅い原因がハッキリと判明しました。
hatomaru.dll は XML データから XHTML を生成した後、それを内部にキャッシュとして保存するようになっていて、XML データが更新されていない場合は内部キャッシュを吐き出すようになっています。キャッシュがある場合は XML のパース、XHTML の生成といったタスクが発生しないため、高速です。
しかし、実は「絶対にキャッシュされないページ」というのがあります。まず、POST 後に表示される「投稿ありがとう」系のページはキャッシュしません。これはしても意味がありませんし、問題ないでしょう。ところがもう一つあって、それがなんと入力フォームのあるページ全てだったりするわけです。
入力フォームのページには、Cookie を使って投稿者の名前とメールアドレスを記録する仕組みがあります。Cookie の値がセットされている場合、フォームにあらかじめ名前が入った状態になります。これをキャッシュすると、投稿者欄に誰かの名前がセットされた状態でキャッシュしてしまう可能性があります。
※というか、実際にあって、泡を食って直したのですが。
というわけでフォームのあるページはキャッシュしていませんが、「○○へのコメント」というページ全てにコメントフォームが存在しているわけでして、それらのページは全然キャッシュされていません。アクセスされるたびにいちいちデータを読んで生成しているわけです。これが負荷の元凶。
そんなわけですから、データ構造を見直したりする前に
- コメント一覧のページからコメントフォームを分離する
- 掲示板の記事個別表示のページからもコメントフォームを分離する
- Cookie がない場合はコメントフォームをキャッシュするようにする
という対処で効果が上がるものと思われます。
※でも実装するのはちょいとばかり面倒。
- 「続・鳩丸高速化計画その2・原因調査」へのコメント (12件)
関連する話題: C# / プログラミング / えび日記 / hatomaru.dll / 鳩丸高速化計画
- 前(古い): 印紙税の還付
- 次(新しい): 続・鳩丸高速化計画その3・画像処理