今後のMTへの要望(その3・再構築順序の設定)

静的再構築時の負荷を下げるために、Movable Type 4.2でテンプレートモジュールとウィジェットをキャッシュする機能が追加されました。
しかし、このキャッシュ機能は分かりにくく、また場合によっては十分に機能しないこともあります。
そこで、キャッシュ機能の代わりに、テンプレートの再構築順序を設定できる機能を要望します。

1.キャッシュだと分かりにくい例

例えば、個々のブログ記事のページのサイドバーに、そのブログ記事が属するカテゴリのブログ記事一覧を出力したいとします。
このような事例はよくあることですが、「同一カテゴリのブログ記事一覧」をキャッシュするようにしないと、記事が増えるにつれて再構築時間が莫大に伸びてしまうという問題があります。

参考:複雑なキャッシュとその効果

ただ、このようなキャッシュを行うには、カテゴリのIDをキーにして、キャッシュをキーで作り分けるということが必要になります。
しかし、キャッシュをキーで作り分けるという考え方は、分かりづらいです。

2.キャッシュでは問題がある例

テンプレートタグの中には、テンプレートのコンテキストによって、動作が変わるタグがあります。
ところが、標準の機能では、コンテキストを固定することができません。
そのため、キャッシュの内容が不定になってしまうことが起こりえます。

例えば、「最近のブログ記事一覧」をキャッシュしようとして、MTEntriesタグのブロックを入れたテンプレートモジュールを作り、キャッシュするように設定したとします。
ブログ全体を再構築する場合、まずアーカイブテンプレートから再構築が行われ、その後にインデックステンプレートが再構築されます。
そのため、キャッシュされる内容は、最初に再構築されたアーカイブテンプレートの種類に依存します。

ところが、MTEntriesタグは、アーカイブの種類によって動作が変わります。
また、各アーカイブの再構築の順序は、環境によって変わります。
そのため、環境によってキャッシュの内容が違ったものになってしまいます。

例えば、カテゴリアーカイブテンプレートが最初に再構築される環境だと、最初に再構築したカテゴリに属する最新記事の一覧がキャッシュされてしまいます。
しかし、これは望んでいる動作ではありません。

3.再構築の順序を指定する

上記のような問題は、再構築の順序を明示できるようになれば、解決することができます。

1.の「同一カテゴリのブログ記事一覧」の例だと、以下のようにすれば良いです。

  • 1.各カテゴリのブログ記事一覧だけを出力するカテゴリアーカイブテンプレートを作ります。
  • 2.再構築の際に、1.のカテゴリアーカイブテンプレートが最初に再構築されるようにします。
  • 3.ブログ記事アーカイブテンプレートを再構築する際には、2.で再構築済みのカテゴリ毎のブログ記事一覧のファイルを組み込むようにします。

また、2.の「最近のブログ記事一覧」の例だと、以下のようにすれば良いです。

  • 1.最新のブログ記事一覧だけを出力するインデックステンプレートを作ります。
  • 2.再構築の際に、1.のインデックステンプレートが最初に再構築されるようにします。
  • 3.ブログの各ページを再構築する際には、2.で再構築済みの最新のブログ記事一覧のファイルを組み込むようにします。

ここまでで述べたように、テンプレートAを再構築する際に、テンプレートBの再構築結果のファイルを組み込みたい場合には、テンプレートBが先に再構築されている必要があります。
このような、「再構築の順序」を明示できる機能を要望したいです。