Zend Framework中有3種常用的前端類,分別是
Zend_Cache_Core
Zend_Cache_Frontend_Output
Zend_Cache_Frontend_Page
與之對應的ASP.NET中的概念分別是資料緩衝,片段快取,頁面緩衝。
其中Zend_Cache_Frontend_Output和Zend_Cache_Frontend_Page都繼承了Zend_Cache_Core。
在建立緩衝的時候,對應的代碼如下,這些代碼一般寫在資源方法中,Bootstrap.php檔案內。
if (false == Zend_Registry::isRegistered('coreCache')) { $frontendOptions = array( 'lifetime' => 10, 'automatic_serialization' => true ); $backendOptions = array( 'cache_dir' => APPLICATION_PATH . '/tmp' ); $core_cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions); Zend_Registry::set('coreCache', $core_cache);}
if (false == Zend_Registry::isRegistered('outputCache')) { $frontendOptions = array( 'lifetime' => 10 ); $backendOptions = array( 'cache_dir' => APPLICATION_PATH . '/tmp' ); $output_cache = Zend_Cache::factory('Output', 'File', $frontendOptions, $backendOptions); Zend_Registry::set('outputCache', $output_cache);}
if (false == Zend_Registry::isRegistered('pageCache')) { $frontendOptions = array( 'lifetime' => 4 ) ; $backendOptions = array( 'cache_dir' => APPLICATION_PATH . '/tmp' ); $page_cache = Zend_Cache::factory('Page', 'File', $frontendOptions, $backendOptions); Zend_Registry::set('pageCache', $page_cache);}
Zend_Cache_Core主要用來快取資料。比如數組,字串之類的。類似ASP.NET中的資料緩衝。下面的代碼示範如何用緩衝。
try { $core_cache = Zend_Registry::get('coreCache'); $z_now = Zend_Date::now(); if (!$result = $core_cache->load("now")) // 緩衝未命中 { echo "緩衝未命中<br>"; $core_cache->save($z_now, "now");//加入緩衝 echo $z_now; } else { echo "快取命中<br>"; echo $result; } } catch (Exception $e) {echo $e->getMessage(); }
初次開啟頁面,由於沒有緩衝,因此緩衝未命中,把目前時間加入緩衝中。然後重新整理頁面,緩衝已經有了,直接讀緩衝,因此會發現時間不變。
當10秒後緩衝失效,緩衝又未命中了。
Zend_Cache_Frontend_Output繼承了Zend_Cache_Core,因此上述的快取資料的方法,它也可以使用。
同時它是一個輸出捕捉前端.它在PHP中使用輸出緩衝捕獲start() 和 end() 方法間的一切輸出. 類似於ASP.NET中的片段快取。看如下範例程式碼:
try { $output_cache = Zend_Registry::get('outputCache'); if (!($output_cache->start('myoutput'))) { echo Zend_Date::now(); $output_cache->end(); // output buffering ends echo "緩衝未命中"; } echo "<br>目前時間為:"; echo Zend_Date::now(); } catch (Exception $e) {echo $e->getMessage(); }
$output_cache->start('myoutput') 這句話,如果已經有了myoutput這個緩衝的話,也就是說start方法返回的是true的話,則if裡面的語句運行了。直接把myoutput這個緩衝的內容輸出一遍。否則,重新記錄一遍myoutput緩衝,緩衝的內容就是送start到end之間的內容。發送緩衝記錄後,後續的代碼繼續運行下去。
Zend_Cache_Frontend_Page同樣繼承了Zend_Cache_Core,它和Zend_Cache_Frontend_Output類似,但不同的是,它不是緩衝單一的資料片斷,而是緩衝整個頁面。因此它只有start方法,沒有end方法,或者說當程式運行完,會自動的運行end方法。使用更簡單,只需要代碼如下:
try { $page_cache = Zend_Registry::get('pageCache'); $page_cache->start(); echo Zend_Date::now();} catch (Exception $e) { echo $e->getMessage();}
首次的時候,會把start方法後面的輸出都會緩衝起來。下次啟動並執行時候,快取命中的話,就直接發送緩衝,而不執行下面的語句了。如果後續的語句是資料庫中的資料,則會節省了資料庫讀取操作。提升了效率。
本文出自 “一隻部落格” 部落格,請務必保留此出處http://cnn237111.blog.51cto.com/2359144/1300904