キャッシュ - PHPプロ!マニュアル

Smartyマニュアル

- キャッシュ

第 14章キャッシュ

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

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

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

まずはじめにキャッシュを有効にします。これは、 $caching = 1 (あるいは 2) を設定するだけです。

例 14-1. キャッシュを有効にする

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

$smarty->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 を参照して下さい

例 14-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_checkFALSE にして下さい。

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

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

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

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

$force_compile が有効の場合、 キャッシュファイルは常に再生成されます。これは事実上、キャッシュ機能を無効にします。通常、 $force_compileデバッグ 目的でのみ使用し、キャッシュは $caching = 0 . にセットして無効にするのがさらに効率の良い方法です。

is_cached() 関数は、テンプレートが有効なキャッシュを持っているかどうかを調べるのに使われます。 もしデータベースフェッチを必要とするようなテンプレートのキャッシュが存在する場合、 フェッチ過程をスキップするためにこの関数を使う事が出来ます。

例 14-4. is_cached() を使用する

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

$smarty->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() 関数によって、個々のキャッシュファイル (そしてグループ ) をクリアする事ができます。

例 14-5. キャッシュをクリアする

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

$smarty->caching 1;

// 全てのキャッシュファイルをクリアします
$smarty->clear_cache('index.tpl');

// index.tplのキャッシュファイルのみクリアします
$smarty->clear_all_cache();

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

閲覧履歴



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)

Q&A掲示板 新着情報