テンプレート変数増やしたら、DBアクセス数増えて遅くなった場合の対処 | MODxでハマるありがちな罠と解決法

テンプレート変数増やしたら、DBアクセス数増えて遅くなった場合の対処

まあ、表題の通りで。多かれ少なかれ、大抵のCMSではDBを使っているので、こうなります。

一番ありがちなのが、WayFinderやDittoのプレースホルダーテンプレートで、GetField等を使い、他ドキュメントのテンプレート変数を参照しにいった場合ですね。破格に重たくなります。
#ま、当然の事なんですが、初心者向けではないので、解説はしませんよ。

じゃあ、当方では、どうやって対処しているか。

簡単です。スニペット自作。

特に、他ドキュメントからテンプレート変数を取る場合、同一ドキュメントから複数の値を取ることが多いので、IDさえ判っていればgetDocumentVars等で、簡単に必要なテンプレート変数を「複数同時に」取得できます。

DittoのプレースホルダーテンプレートにGetFieldを10個仕込んでいたら、そりゃ、Dittoが20レコード引っ張ったら最低でもDBアクセスは200回になるです。はい。
実際は、物凄い数字になりますが。
でも、こうすれば、40回くらいで済むはず。これだけで負荷はかなり減ります。

MODxを好んで使っている方や、組み込んでいる方は、ほぼ「PHP」は判る方が多いと(勝手に)思ってますので、是非お試しを。

この件は、続編でサンプルコード出せたらと思います。
汎用的に作れそうなので、ドキュメントIDとプレースホルダーテンプレートを指定したら埋め込んだ内容を返す的な。
#既にあったらびっくり。

2010/02/09追記
作ってみましたのでこちらからどうぞ。
他ドキュメントを 何度も参照する場合のDB負荷軽減用スニペット


最終更新日
2010.02.09 (火)
最終更新者
Takayuki Hirosawa