キャッシュのセットアップ
まずはじめにキャッシュを有効にします。これは、
$caching = 1 (あるいは 2)
を設定するだけです。
キャッシュを有効にする
caching = 1;
$smarty->display('index.tpl');
?>
]]>
いつものようにテンプレートから出力内容をパースするために
display('index.tpl') を呼び出しますが、
キャッシュを有効にした事でその出力内容をコピーしたファイルが
$cache_dir
内に保存されます。次回 display('index.tpl')
が呼ばれる際には、再びテンプレートをパースする代わりにキャッシュされたコピーが使用されます。
テクニカルノート
$cache_dir
内のファイルにはテンプレート名に類似した名前が付けられます。
拡張子は .php ですが、実際にはPHPスクリプトとして実行されません。
これらのファイルは編集しないで下さい!
各々のキャッシュされたページは、
$cache_lifetime
生存時間が限られています。デフォルト値は 3600 秒です。
期限が過ぎた後、キャッシュは再生成されます。
$caching=2
を設定する事によって、個々のキャッシュに自分自身の生存時間を与える事が可能です。詳細は、
$cache_lifetime
を参照して下さい
キャッシュごとに生存時間を設定する
caching = 2; // 生存時間はキャッシュごと
// index.tplに5分のcache_lifetimeをセットします
$smarty->cache_lifetime = 300;
$smarty->display('index.tpl');
// home.tplに1時間のcache_lifetimeをセットします
$smarty->cache_lifetime = 3600;
$smarty->display('home.tpl');
// 注: $caching = 2の時、次のような$cache_lifetimeの設定は動作しません。
// home.tplのキャッシュの生存時間は既に1時間にセットされているので、
// もはや、$cache_lifetimeの値が尊重される事はありません。
// home.tplのキャッシュは、今までどおり1時間後に満期になるでしょう。
$smarty->cache_lifetime = 30; // 30 seconds
$smarty->display('home.tpl');
?>
]]>
$compile_check が有効の時、
キャッシュファイルに入り組んだすべてのテンプレートファイルと設定ファイルは
修正されたかどうかをチェックされます。
もしキャッシュが生成されてからいくつかのファイルが修正されていた場合、
キャッシュは即座に再生成されます。
これは最適なパフォーマンスのためには僅かなオーバーヘッドになるので、
$compile_check
は &false; にして下さい。
$compile_check を有効にする
caching = 1;
$smarty->compile_check = true;
$smarty->display('index.tpl');
?>
]]>
$force_compile が有効の場合、
キャッシュファイルは常に再生成されます。これは事実上、キャッシュ機能を無効にします。通常、
$force_compile
は デバッグ
目的でのみ使用し、キャッシュは
$caching
= 0.
にセットして無効にするのがさらに効率の良い方法です。
is_cached()
関数は、テンプレートが有効なキャッシュを持っているかどうかを調べるのに使われます。
もしデータベースフェッチを必要とするようなテンプレートのキャッシュが存在する場合、
フェッチ過程をスキップするためにこの関数を使う事が出来ます。
is_cached() を使用する
caching = 1;
if(!$smarty->is_cached('index.tpl')) {
// キャッシュが有効でないので、ここで変数の割り当てを行います
$contents = get_database_contents();
$smarty->assign($contents);
}
$smarty->display('index.tpl');
?>
]]>
{insert}
テンプレート関数によってページの一部を動的に保つ事が出来ます。
例えば、すべてのページは右下に表示されるバナー以外はキャッシュが可能だとします。
バナー部分には
{insert}
関数を使う事によって、キャッシュされたコンテンツの中に動的な要素を保つ事ができます。
詳細な説明や例は、{insert}
のドキュメントを参照してください。
clear_all_cache()
関数または clear_cache()
関数によって、個々のキャッシュファイル (そしてグループ)
をクリアする事ができます。
キャッシュをクリアする
caching = 1;
// 全てのキャッシュファイルをクリアします
$smarty->clear_cache('index.tpl');
// index.tplのキャッシュファイルのみクリアします
$smarty->clear_all_cache();
$smarty->display('index.tpl');
?>
]]>