Template Toolkit 探訪 (2)
前回お話したように,Template::Provider は,コンパイルしたテンプレートオブジェクトを,デフォルトではメモリ(内部のハッシュ)に蓄えておき,出来る限り再利用しています。ただ,当然再利用するためにはテンプレート「自体は」静的なものでなくてはいけませんから,ファイル名が指定された場合のみキャッシュします。つまり,生データのスカラハッシュや,ファイルグロブを与えた場合は,毎回コンパイルしているわけです。
デフォルトでは読み込まれれば読み込まれただけキャッシュにためておきますが,CACHE_SIZE というパラメータを初期化時に指定しておくと,その数のテンプレートだけ保持します。4 と指定しておくと,4つぶんだけキャッシュして,5つめがきたときには,一番使われていない(LRU)エントリを削除します。
さて,今回の本題です。Template::Provider には,メモリだけでなく,ディスクにキャッシュするという機能があります。COMPILE_DIR や COMPILE_EXT という初期化パラメータを指定すると,コンパイルしたテンプレートオブジェクトを指定されたディレクトリに書き込みます。一つのテンプレートファイルにつき,一つのキャッシュファイルが作成されます。一つのテンプレートに複数ブロックがあったとしても,それらはまとめて記録されているわけです。
では,メモリにキャッシュするのとディスクにキャッシュするのとでは,どちらが望ましいのでしょうか。mod_perl 環境で ab によるベンチマークをとってみました。
続きを読む