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 的有用示例,它们似乎是基于该操作呈现一个特定脚本的事实。

我真正关注的是缓存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 开销”,因为 MVC 框架正是 Zend_Cache 所在的上下文。一旦您进入控制器操作,您已经使用了一堆资源路由和设置。

也就是说,如果 indexpublic.phtml 中出现昂贵的东西,您可能会考虑在模板中使用 Zend_Cache_Frontend_Output 来缓存一堆东西。如果 indexpublic 启动昂贵的操作(如 DB 命中),这可能是值得的。如果它只是生成标记的纯 PHP,那么您不太可能看到很大的改进。

在做任何事情之前,我建议您非常仔细地研究您的应用程序行为,并确保您在正确的位置进行优化,而不是过早地进行优化。

于 2010-05-30T19:13:53.170 回答