Zend_Cacheでテンプレートエンジンを高速化  2009年4月22日

Bsheでは、Zend_Cacheを用いて、テンプレートエンジンを高速化しています。

テンプレートエンジンはHTMLをDOM解析する方式を利用しているのですが、PHPのDOMクラスはシリアライズ化して保存することができないので、やむ得ず自力で書いたDOM解析エンジンを積んでいます。

テンプレートの変更の際だけ再生成されるキャッシュが必要となったのですが、Zend_Cacheには「Zend_Cache_Frontend_File」なる便利なクラスが用意されています。

これは、元となるファイルを指定して、そのファイルが更新されていなければキャッシュが取得でき、ファイルが更新されていればキャッシュが取得できないというまさにうってつけの機能です。

実際の実装はBsheの以下のクラスを参考にしてください。(ダウンロードはこちら

  • ●Bshe_View_Template_HtmlクラスのreadTemplateFileメソッド

テンプレートファイルを読み込み、テンプレートクラスを初期化するところで

$frontendOptions = array(
    ‘master_file’ => ‘HTMLのテンプレートファイルの指定’,
    ‘automatic_serialization’ => true,
    ‘ignore_user_abort’ => true
    );
$backendOptions = array(
    ‘cache_dir’ => ‘/cache’ // キャッシュファイルを書き込むディレクトリ
    );
$cache = Zend_Cache::factory(‘Core’, ‘File’, $frontendOptions, $backendOptions);

if ($template = $cache->load(‘キャッシュ名’) {
    // キャッシュ読み込み
    $template->_isCached = true;
    $template->setParams($this->_params);
    return $template;
}

のようにして、キャッシュがあれば、キャッシュから取得したテンプレートクラスを返すようにします。

実際の実装では、この後ろで、HTMLのテンプレートファイル読み込んで、DOM解析したテンプレートクラスを返すようになっており、もしキャッシュがあれば上記の部分でreturnされるため、DOM解析の時間を節約できます。

 

このエントリをはてなブックマークに登録 このエントリをBuzzurlにブックマーク Yahoo!ブックマークに登録 このエントリをlivedoorクリップに登録 Deliciousにブックマーク

コメントを投稿