Smarty マニュアル

前のページ

次のページ

第 13章キャッシュ

目次

キャッシュのセットアップ

ページごとに複数のキャッシュ

キャッシュのグループ

キャッシュ可能なプラグインの出力の制御

キャッシュは出力内容をファイルに保存する事によって、display()又はfetch()を呼び出す速度を上げるために使用されます。呼び出されたキャッシュが有効の場合、出力を再生成せずに表示されます。特に処理時間が長いテンプレートは、キャッシュを使用する事でおそろしく速度が上昇するでしょう。display()又はfetch()の出力がキャッシュされた後、ひょっとすると1つのキャッシュファイルは複数のテンプレートファイルや設定ファイル等で構成されているかもしれません。

テンプレートが動的コンテンツの場合、何をどれくらいの間キャッシュするのか注意が必要です。例えば、Webサイトの一面にそれほど変更されないコンテンツが表示されている場合は、一時間かそれ以上、このページをキャッシュするとうまく動作するでしょう。一方、一分経過するごとに新しい情報が格納される天気図をページに表示する場合は、このページをキャッシュする事は意味をなさないでしょう。

キャッシュのセットアップ

まずはじめにキャッシュを有効にします。これは、$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')が呼ばれる時、再びテンプレートをパースする代わりにキャッシュされたコピーが使用されます。

テクニカルノート: $cache_dir内のファイルにはテンプレート名に類似した名前が付けられます。それらは".php"拡張子ですが、本当にはphpスクリプトとして実行されません。これらのファイルは編集しないで下さい!

各々のキャッシュされたページは、$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にして下さい。

例 13-3. $compile_checkを有効にする

<?php
require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching = true;
$smarty->compile_check = true;

$smarty->display('index.tpl');
?>

続き…

ページ上段