« MTの再構築中に「500」でエラー落ちするときの設定備忘 | ホーム | WordPressにも手を出してみる。 »

2012年4月27日

MTの再構築を早くする方法

この前の雑記ではMTが再構築中に落ちるのを回避する方法を書きましたが、そう言った対応をした場合に再構築に時間が掛かるようになってしまいます。

今回それを短くする方法がやっと理解出来たので書きたいと思います。 これを設定すると9分ほど掛かっていた再構築が2分に短縮されました!(`・ω・´)! これは早い。

そんな訳で、まず短く出来る前提条件は

  1. 共通で使う部分テンプレートモジュールがある
  2. そのテンプレートモジュールを構築するのに時間が掛かる

...と言う感じになっています。 今回の方法の他にもphp化する?ような方法もありますが、サーバが対応してない(と言うか、記事が多すぎなのか500のエラーが...)出たりするので、こっちの方が安定してそうです。

あと、1.は簡単に分かるかもしれませんが、2.はよく判らんと言う場合に簡単な見分け方。カテゴリを階層的に全て書き出すような処理や、条件を指定してあるとはいえ10件以上の記事を書き出すような処理は構築に時間が掛かると考えておいた方が良いと考えられます。

ここまでえらそうに書いていますが、実装はとても簡単。

[設定] > [全般設定] の[モジュール設定] 項目にあるモジュールのキャッシュのチェックボックスを有効にするだけです(ゝω・)v...と言いたいところですが、これではキャッシュされるテンプレートモジュールがまだありません。

今度は先の条件に出した構築に時間が掛かるテンプレートモジュールを読み込む方に設定をします。

今までモジュールを読み込むときは

 <$mt:Include module="テンプレートモジュール名"$>

ですませていたと思いますが、これを

 <$mt:Include module="テンプレートモジュール名" cache="1"$>

としてあげます。これでテンプレートモジュールが構築される回数が格段に減ります。用はサーバのメモリに構築された結果がキャッシュ(一時保存)されるわけです。

ただし、このままだと「ホントはカテゴリーと記事で表示結果が変わってくるはずなのに、おんなじのが表示されてる...(´・ω・`)」とか、そう言う問題が出てきます。 これは初期設定が「数十秒キャッシュしてくださいね、その情報を使い回しますから。」と言う設定なっているからです。

「それじゃあ、同じ情報が載ってしまうと困るものだけキャッシュしないでおこう」と言う考え方もありますが、それだとキャッシュの設定をしたのに効果があまり出ない...と言う事になりかねません。

そこで一工夫。

 <$mt:Include module="テンプレートモジュール名" cache="1" key="同じ情報を使うものは同じ名前を付ける"$>

...です。key="~" はキャッシュ更新の判別に使われるもので、例えば記事のときは key="entry" 、カテゴリーのときは key="category" と言う風に名前を付けてあげると、 key="~" の名前が変わったらそのテンプレートモジュールも構築しなおすようになります。

他にもキャッシュしておく時間を設定しておく ttl="キャッシュしておきたい時間(秒)" もありますが、時間で区切ったところでどうなの...と思うのですが、あなたはどう思いますか?

そんな訳で、今回は「構築時間を短縮出来るようになって嬉しいな(ゝω・)v」と言うお話でした。

コメントする