2006年2月11日

テンプレートをSSI化

 このブログのテンプレートを一部SSI化した。

 テンプレートに内在するバグを潰すことが出来る上に、高速化できるという1粒で2度美味しい修正であり、構想は前からあったのだが、単に面倒でやっていなかった。

 こないだ移転先候補のサーバーを作っていて、ブログを入れてテストしてみたところ、レンタルサーバより遅いことに気づいた。スペック上遅いのは分かりきったことなのだが、共有でない自鯖のメリットが全然生かされていない速度に愕然とし、SSI化に踏み切ることになった。

 このブログのテンプレートでは、トップページでも各エントリのページでも右ペインがある。具体的には、「最新のエントリ」とかの部分だ。って見りゃ分かるか。

 その「最新のエントリ」が実は最新でないというバグがあった。記事を投稿しても各エントリは再構築されないので、記事を投稿した時点での「最新」になってしまっていた。(正確には、ページ上部にある次のエントリのリンクを作るため、次のエントリが投稿された時の最新。)

 ブログ全体を再構築させる操作をすると、全てのエントリのページが正しい状態になる。しかし、再構築は時間がかかるので普段はやらない。テンプレートを修正したときなど、必要なときしかやらない。

 再構築に時間がかかるのには理由があって、各エントリに対していちいち右ペインのHTMLを内部で生成しているからだ。すべて同じ結果になるのに、内部では数百エントリ分同じ処理をしている。そこに無駄がある。

 とうことで、右ペインを一回だけつくり、全てのページがSSIでインクルードするよう改造すれば、バグも直るし、高速化もできる。

 高速化のセオリーとしては、SSIが必要なページだけ .shtml などの拡張子にしてSSI処理をさせ、必要ないページは .html のままにして余計な処理をさせないのが通例である。でもリンクの不整合が発生するリスクを考えたらそこまで厳格にチューニングできなかった。SSIのオーバーヘッドは微々たる物なので問題ないと思う。

 思う。じゃなくて、「問題ない!」と言い切るためには高負荷テストをする必要がある。「非SSIがnnn[ページ/秒]で、SSI化したら[mmmページ/秒]で、想定最大アクセス数からホゲホゲ。」ということを言わなければいけないわけだが、nnnが1より全然小さい数の一般サイトではテストする時間が無駄。

 SSIの微々たるオーバーヘッドと引き換えに、再構築時間が5倍ぐらい速くなった。

Posted by rukihena at 23:06:26
トラックバックURL

このエントリーのトラックバックURL:
http://weblog.rukihena.com/mt/mt-tb.cgi/344

コメント

ん?これ、飲んだ後やったの?

Posted by よ at 2006年2月15日 23:55

実行日とタイムスタンプは編集の都合上、「演出」している場合があります。

Posted by るきへな at 2006年2月19日 08:19