Frontend(キャッシュ対象)は指定のクラスやファイルやページや出力などが指定できる。
Backend(キャッシュ保管場所)はファイルやmemcachedやDBなどが使える。
Zend_Cache_Frontend_Page
ページまるまるキャッシュする。なかなか便利。
導入方法
http://d.hatena.ne.jp/noopable/20090326/12...
これ、$cahce->start()するだけっていうのがどんな仕組みで動いてるのか不思議だったけど、ソース見て一目瞭然。ob_startにコールバック指定できて、flushしたときに同時にキャッシュ保存してるだけだった。
Controller内で使う場合はFrontで'disableOutputBuffering'をtrueにしなければならない。でないと空のデータがキャッシュされてしまう。
バッファリングにob_startを使ってるんだろう。ob_startはネストできないのでどちらか切らなければならない。バッファリングをoffにするとコントローラー内でechoしたものが先にでてくる。他に弊害あるかな?
// http://www.zfforums.com/zend-framework-components-13/core-infrastructure-19/help-zend_cache_frontend_page-1180.html
$front->setParam('disableOutputBuffering', true);
Zend_Configをキャッシュするサンプル
require_once 'Zend/Config/Ini.php';
require_once 'Zend/Cache.php';
$file = 'config.ini';
$frontendOptions = array(
'lifetime' => 7200, // キャッシュの有効期限を 2 時間とします
'automatic_serialization' => true,
'master_file' => $file
);
$backendOptions = array(
'cache_dir' => './tmp/' // キャッシュファイルを書き込むディレクトリ
);
// Zend_Cache_Core オブジェクトを取得します
$cache = Zend_Cache::factory('File', 'File', $frontendOptions, $backendOptions);
if (!$config = $cache->load('config')){
//$options['nestSeparator'] = ':';
$config = new Zend_Config_Ini($file, null, array('allowModifications' => true));
$cache->save($config, 'config');
}else{
echo "use cache\n";
}
var_dump($config->toArray());