MovableType のテンプレートが肥大化・複雑化すると、その再構築に要する時間やサーバ負荷が増すことになります。しかし実際のテンプレート中には、再構築によってその内容が変化しない部分が少なくありません。そのような部分については毎回々々構築を行う必要はなく、前回に構築された結果を流用することによって、テンプレート全体の再構築に要する時間や負荷を軽減できると期待できます。
テンプレート中の任意のブロックを再構築するか否かの判断が、一つ以上の値に依存しているとします。単純な例を挙げると、前回の再構築から記事の最終更新日が変化していないのであれば、<$MTEntryTitle$>
、<$MTEntryBody$>
や <$MTEntryMore$>
などのテンプレートタグのみを含むブロックは再構築の必要がありません。そのようなブロックには前回の再構築のタイミングでキャッシュされていた内容を流用することで、これらテンプレートタグの構築処理を省略することができます。
ところで <$MTInclude module="..."$>
は、テンプレートをモジュール化しているだけなので、モジュールに含まれるテンプレートタグの再構築を省略することはできません。一方、KeyCached ではテンプレートタグを一度構築した結果をキャッシュとして保存し、次回以降の再構築の際にテンプレートタグを解析・構築する替わりに、保存されたキャッシュを利用するため、その部分の再構築処理の一切を省略できる点が異なります。
<MTKeyCachedKey> <$MTEntryModifiedDate$> </MTKeyCachedKey> <MTKeyCachedValue> : このブロックを再構築すべきか否かの判断は <$MTEntryModifiedDate$> に依存しています。 つまり、前回の再構築以降に記事が更新保存されていた場合にのみ再構築されます。 更新されていない場合、このブロックは再構築されず、前回の構築結果が使われます。 : </MTKeyCachedValue>
ブログの検索結果ページ全体を KeyCached を用いて高速化した場合の効果を測定してみました。MovableType の検索機能は、検索の度に内部で構築処理が行われているため、キャッシュの恩恵が大きく現われます。検索結果は検索文字列にのみ依存しているものとします。実際には記事が追加/編集/削除されることを考慮する必要がありますが、とりあえずキャッシュの有効期間を短くすることで対応することにします。
<MTKeyCachedKey> <$MTSearchString$> </MTKeyCachedKey> <MTKeyCachedValue> : 検索結果ページ全体の HTML とテンプレートタグ : </MTKeyCachedValue>
# | min [ms] | mean [ms] | max [ms] | total [s] |
---|---|---|---|---|
KeyCached 無し | ||||
1 | 2,454 | 2,844 | 3,657 | 28.45 |
2 | 2,611 | 2,856 | 3,342 | 28.57 |
KeyCached 有り | ||||
1 | 824 | 1,197 | 2,117 | 11.98 |
2 | 885 | 1,314 | 1,711 | 13.15 |
さくらインターネットのレンタルサーバで稼動しているMTに対して、計測には Apache Bench を使用しました。ab -n 10 -c 1 <URL>
master
) ... バグ修正や機能追加など開発途中のバージョンです。開発中の新機能などをいち早く利用できますが、新しいバグが生まれていたり、テストが不十分な場合があります。
寄せられたコメント (全 17 件中、最新 5 件まで表示しています)
ダウンロードは以下のURLから可能です。どうぞご利用ください。(ややこしいですね)
http://lab.magicvox.net/trac/mt-plugins/changeset/135/KeyCached/trunk?old_path=%2F&format=zip
早速落とさせていただきました。
素晴らしいプラグインをどうもありがとうございました!
再構築の重さにうんざりしており、
こういうプラグインをずっと探していました。
早速利用させていただこうと思い、
KeyCached の Trac リポジトリ
( http://lab.magicvox.net/trac/mt-plugins/wiki/KeyCached )
を開こうと何度も試しているのですが、なぜか繋がりません。
上記URLをクリックするだけでは入れないのでしょうか?
ご多忙とは思いますが、よろしくお願いします。