キャッシュのセットアップ
まずはじめにキャッシュを有効にします。
これは、$caching = true (又は 1)を設定するだけです。
これは、$caching = true (又は 1)を設定するだけです。
例 13-1. キャッシュを有効にする
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
$smarty->display('index.tpl');
?>
いつものようにテンプレートから出力内容をパースするためにdisplay('index.tpl')を呼び出しますが、キャッシュを有効にした事でその出力内容をコピーしたファイルが$cache_dir内に保存されます。
次にdisplay('index.tpl')が呼ばれる時、再びテンプレートをパースする代わりにキャッシュされたコピーが使用されます。
次にdisplay('index.tpl')が呼ばれる時、再びテンプレートをパースする代わりにキャッシュされたコピーが使用されます。
テクニカルノート: $cache_dir内のファイルにはテンプレート名に類似した名前が付けられます。それらは".php"拡張子ですが、本当にはphpスクリプトとして実行されません。これらのファイルは編集しないで下さい!
各々のキャッシュされたページは、$cache_lifetimeによって生存時間が限られています。
デフォルト値は3600秒です。期限が過ぎた後、キャッシュは再生成されます。
$caching = 2 を設定する事によって、個々のキャッシュに自分自身の生存時間を与える事が可能です。詳細は、$cache_lifetimeを参照して下さい。
デフォルト値は3600秒です。期限が過ぎた後、キャッシュは再生成されます。
$caching = 2 を設定する事によって、個々のキャッシュに自分自身の生存時間を与える事が可能です。詳細は、$cache_lifetimeを参照して下さい。
例 13-2. キャッシュごとに生存時間を設定する
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->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はfalseにして下さい。
例 13-3. $compile_checkを有効にする
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
$smarty->compile_check = true;
$smarty->display('index.tpl');
?>
$force_compileが有効の場合、キャッシュファイルは常に再生成されます。
これは事実上、キャッシュ機能を無効にします。
通常、$force_compileはデバッグ目的でのみ使用し、キャッシュは$caching = false (又は 0)にセットして無効にするのがさらに効率の良い方法です。
これは事実上、キャッシュ機能を無効にします。
通常、$force_compileはデバッグ目的でのみ使用し、キャッシュは$caching = false (又は 0)にセットして無効にするのがさらに効率の良い方法です。
is_cached関数は、テンプレートが有効なキャッシュを持っているかどうかを調べるのに使われます。
もしデータベースフェッチのようなものを必要をするキャッシュされたテンプレートを持つとき、その過程をスキップするためにこの関数を使う事が出来ます。
もしデータベースフェッチのようなものを必要をするキャッシュされたテンプレートを持つとき、その過程をスキップするためにこの関数を使う事が出来ます。
例 13-4. is_cached()を使用する
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
if(!$smarty->is_cached('index.tpl')) {// キャッシュが有効でないので、ここで変数の割り当てを行う $contents = get_database_contents(); $smarty->assign($contents);}
$smarty->display('index.tpl');
?>
insert?テンプレート関数によってページの一部を動的に保つ事が出来ます。
例えば、すべてのページは右下に表示されるバナー以外はキャッシュが可能だとします。
バナー部分にはinsert?関数を使う事によって、キャッシュされたコンテンツの中に動的な要素を保つ事ができます。詳細は、insert?を参照して下さい。
例えば、すべてのページは右下に表示されるバナー以外はキャッシュが可能だとします。
バナー部分にはinsert?関数を使う事によって、キャッシュされたコンテンツの中に動的な要素を保つ事ができます。詳細は、insert?を参照して下さい。
clear_all_cache関数またはclear_cache関数によって、個々のキャッシュファイル(又はグループ)をクリアする事ができます。
例 13-5. キャッシュをクリアする
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
// 全てのキャッシュファイルをクリアする
$smarty->clear_all_cache();
// index.tplのキャッシュファイルのみクリアする
$smarty->clear_cache('index.tpl');
$smarty->display('index.tpl');
?>