2

ユーザーがログインしているかどうかに基づいて、2 つの異なるビュー スクリプトをレンダリングするアクションがあります。

class IndexController extends Zend_Controller_Action
{
    ....
        public function indexAction()
            {

                $auth = Zend_Auth::getInstance();
                if($auth->hasIdentity())
                {
                    $this->render('indexregistered');
                    return; 
                }
                else {
                    $this->render('indexpublic');
                    return;
            }   
    }   
    ....    
} 

Zend Cache の使用方法に関する有用な例をいくつか見てきましたが、それらはアクションが 1 つの特定のスクリプトをレンダリングするという事実に基づいているようです。

本当に見ているのは、かなりの数のヒットを取得するindexpublicスクリプトをキャッシュするための最良のアプローチであり、可能であればZend MVCのオーバーヘッドを避けたいと思っています.

4

2 に答える 2

2

Zend_Cache_Frontend_Outputは、ここで必要なものかもしれません:

if (!($cache->start('indexpublic'))) {
    // output everything as usual
    $this->render('indexpublic');
    $cache->end(); // output buffering ends   
}

その前に、キャッシュ マネージャーを初期化する必要があります (ブートストラップにある可能性があります)。

$frontendOptions = array(
   'lifetime' => 7200
);

$backendOptions = array(
    'cache_dir' => '/tmp/'
);

// getting a Zend_Cache_Frontend_Output object
$cache = Zend_Cache::factory('Output',
                             'File',
                             $frontendOptions,
                             $backendOptions);
于 2010-05-30T19:13:42.050 に答える
2

MVC フレームワークはまさに​​ Zend_Cache が存在するコンテキストであるため、ここで意味のある方法で「MVC オーバーヘッドを回避」することはほとんどありません。コントローラー アクションの内部に入ると、既に大量のリソースを使用しています。ルーティングとセットアップ。

そうは言っても、indexpublic.phtml 内で高価なものが処理される場合は、テンプレート内で Zend_Cache_Frontend_Output を使用して大量のものをキャッシュすることを検討してください。indexpublic が高価な操作 (DB ヒットなど) を開始する場合、これは価値があるかもしれません。マークアップを生成するのが純粋な PHP である場合、大幅な改善は期待できません。

何かを行う前に、アプリケーションの動作を非常に注意深く調べ、時期尚早ではなく適切な場所で最適化を行っていることを確認することをお勧めします。

于 2010-05-30T19:13:53.170 に答える