2010-05-30 80 views
2

我有一個動作根據用戶是否登錄來呈現兩個不同的視圖腳本。如何在這個特定問題上使用Zend Cache

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緩存頗有些有用的例子,他們似乎是基於該操作使一個特定的腳本的事實。

我真正在看的是緩存indexpublic腳本的最佳方法,它可以獲得相當多的點擊數,如果可能的話,我真的很想避免Zend MVC的開銷。

回答

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); 
+0

+1用於明確演示Zend_Cache_Frontend_Output – timdev 2010-05-30 19:16:08

2

你不很有可能在這裏以任何有意義的方式「避免MVC開銷」,因爲這個MVC框架正是Zend_Cache所處的上下文。一旦你進入控制器動作,你已經使用了大量資源進行路由和設置。這就是說,如果indexpublic.phtml裏面有昂貴的東西,你可以考慮在模板中使用Zend_Cache_Frontend_Output來緩存一堆東西。如果indexpublic啓動昂貴的操作(如DB命中),這可能是值得的。如果它只是純粹的PHP產生標記,你不太可能看到太多的改進。

在做任何事之前,我建議你非常仔細地研究你的應用行爲,並確保你在正確的地方進行了優化,而不是過早。