開発中のサイト(Smarty使用)の表示速度がいまひとつ。原因はデータベース絡み(設計と実装が悪い)ということはわかっているのだけど、リファクタリングする前にSmartyのキャッシュの効果を試してみる。
要件とコード
トップページの表示内容は1日1回のデータベース更新によって変わる。逆に言えば、データベースが更新されてから24時間は表示内容は変わらない。さらに、ログイン中のユーザ名と選択されている言語によって表示内容がパーソナライズされる。
キャッシュを使うにはうってつけの要件かも。ユーザ名と言語を組み合わせた文字列をキャッシュIDとし、キャッシュの有効期限を24時間とすれば、コードは以下のように書ける。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
$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)
キャッシュを使わないとき
キャッシュを有効にした直後のアクセス (キャッシュ生成)
キャッシュが効いているアクセス (キャッシュをロード)
参考サイト
PHP TIPS – 47. Smartyのキャッシュを使って負荷を下げよう:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20070704/276676/