WordPressへの移行をぼちぼちと進めているこのサイトですが、やはり使い慣れたMovableTypeも捨てがたい物があり、それほど新しい話題でもないのですが、SSIを利用してページを動的に生成することで再構築の高速化をしてみました。
このブログの場合、以下の動的な要素がページ内にあります。
- 最近のエントリーの一覧
- カテゴリーのリスト
- タグ(タグクラウド)
- (月別)アーカイブのリスト
これらが毎回再構築されるはとても無駄なので、インデックステンプレートにそれぞれのパーツをhtmlファイルに書き出すテンプレートを作成して、エントリやアーカイブのテンプレートで<!--#include virtual="/hoge.html"-->とすることで、再構築時間を短縮出来るはずです。
例) インデックステンプレート: monthlylist.html
<MTEntries lastn="12">
<li class="module-list-item"><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></li>
</MTEntries>
</ul>
これを各テンプレートで<!--#include virtual="/monthlylist.html"-->として読み込みます。同じようにして他の動的要素もhtmlファイルに書き出すようにします。
計測すると300エントリ強の再構築が約35秒となり、3-4倍程度の高速化となりました。かなり快適です。もちろんSSIなのでページ表示毎の負荷は増えますが、アクセス数がたいしたことないので、問題ないことにします。
どうしてもサーバ負荷を減らしたい向きには、
- 動的要素をなるべくまとめて、SSIでインクルードするファイル数を減らす
- おそらくアクセスが最も多いであろうトップページだけはSSI化しない
- mod_cache - Apache HTTP サーバを使う
もう一つ大きな利点ですが、動的要素をSSIで読み込むことにより、再構築の必要性自体がほとんどなくなるということがあります。ざっと見た限り、再構築の必要のあるものは全て新規エントリの作成時に更新されるようです。MovableTypeは4でGPLライセンスにもなるようですし、もしかして、再構築だけを理由にはWPに移行する必要はないかも。。。