端くれプログラマの備忘録 Smarty [Smarty] キャッシュの利用と効果

[Smarty] キャッシュの利用と効果

開発中のサイト(Smarty使用)の表示速度がいまひとつ。原因はデータベース絡み(設計と実装が悪い)ということはわかっているのだけど、リファクタリングする前にSmartyのキャッシュの効果を試してみる。

要件とコード

トップページの表示内容は1日1回のデータベース更新によって変わる。逆に言えば、データベースが更新されてから24時間は表示内容は変わらない。さらに、ログイン中のユーザ名と選択されている言語によって表示内容がパーソナライズされる。

キャッシュを使うにはうってつけの要件かも。ユーザ名と言語を組み合わせた文字列をキャッシュIDとし、キャッシュの有効期限を24時間とすれば、コードは以下のように書ける。

$cacheId = $username . $lang;

$smarty = new Smarty;
$smarty->caching = 1;                             //キャッシュ有効
$smarty->cache_lifetime = 60*60*24;               //有効期限は24時間
if ($smarty->isCached('index.tpl', $cacheId)) {   //キャッシュされていれば
    $smarty->display('index.tpl', $cacheId);      //それを表示するだけ
    exit;
}

//キャッシュされていなければ通常処理
...

$smarty->assign('param1', $param1);
$smarty->assign('param2', $param2);
...
$smarty->display('index.tpl', $cacheId);          //表示してキャッシュ

結果

かなりの効果があった。(160ms→25ms)

キャッシュを使わないとき
smarty_no_cache

キャッシュを有効にした直後のアクセス (キャッシュ生成)
smarty_cache1

キャッシュが効いているアクセス (キャッシュをロード)
smarty_cache2

参考サイト

PHP TIPS – 47. Smartyのキャッシュを使って負荷を下げよう:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20070704/276676/