第一節
這是什麼?
從0.10.9.2378_final版之後,Cake開始支援view暫存(也叫全頁暫存)。
不,我們並沒有開玩笑。
你現在可以將layout和view暫時存放。
還可以將view的某部分標記,讓暫存機制忽略它。
這個功能如果巧妙應用,程式效能就能有效提昇。
當你送出一個URL時,Cake會先檢查這個URL在暫存資料內是否存在。
如果有,Cake就會直接將暫存版的資料回傳。
如果找不到,則動作就和一般沒二樣。
如果你已啟動Cake的暫存功能,Cake會把一般操作的輸出結果放在暫存空間內,讓未來的使用者使用。
下次網頁再被呼叫時,Cake就直接從暫存空間內將資料取出傳回。很棒吧!
讓我們仔細看看如何使用這個功能。
第二節
如何使用?
啟動暫存功能
預設,view暫存的功能是被關閉的。
要啟動它,首先需要更改/app/config/core.php檔內的CACHE_CHECK,由false改成true:
/app/config/core.php (部分)
define ('CACHE_CHECK', true);這一行告訴Cake你要啟動View暫存功能。
在想要暫存的view的controller裡,必須將Cache helper加到$helpers陣列中
var $helpers = array('Cache');
接下來,就得指定要暫存的東西。
Controller變數$cacheAction
這一節,我們將教你如何告訴Cake要暫存什麼。
透過設定controller變數$cacheAction就可以做到。
$cacheAction要被設成陣列,內含想要暫存的action名稱,和想要保留的時間。
時間的指定必需是strtotime()能接受的字串(如'1 day' 或'60 seconds')。
假設我們有一個ProductsController,其中有一些東西想暫存。
以下的範例示範如何使用$cacheAction告訴Cake要暫時存放的東西為何。
$cacheAction 範例
//將最近常被流覽的產品網頁暫時存放六小時:
var $cacheAction = array(
'view/23/' => 21600,
'view/48/' => 21600
);
//暫存整個action。此例中會將rqcalled產品列表暫時存放一天:
var $cacheAction = array('recalled/' => 86400);
//如果想要,也可以將每一個action暫存起來,只要傳入一個時間字串:
//這個時間字串是strtotime()能接受的格式,表示存放的時間。
var $cacheAction = "1 hour";
//你也可以在某個action內定義暫存的內容,只要呼叫$this->cacheAction = array()...
標記View的內容
有時候,我們可能不想讓view內所有的內容都被暫存起來。
如果有些地方是用于展示新產品,你就會要Cake在暫存此頁時,不要將那一部分暫存。
要指定不被暫存的內容,只要將這些內容用<cake:nocache> </cake:nocache>標籤包起來即可。
<cake:nocache> 範例
<h1> New Products! </h1>
<cake:nocache>
<ul>
<?php foreach($newProducts as $product): ?>
<li>$product['name']</li>
<?endforeach;?>
</ul>
</cake:nocache>
清除暫存資料
首先要知道,如果資料庫有變更,Cake就會自動清除暫存資料。
例如,如果有個view用到Post model內的資訊,而Post曾被INSERT,UPDATE或DELETE過,Cake就會清除這個view的暫存資料。
但,有些狀況你會想自己清除某些暫存資料。
Cake也提供了clearCache()函式來做這件事,而它是全域函式:
clearCache() 範例
//清除名稱為'controller'的所有暫存網頁
clearCache('controller');
//清除名稱為'controller_action'的所有暫存網頁
clearCache('controller_action/');
//清除名稱為'controller_action_params'的所有暫存網頁
//註:可以有多個params
clearCache('controller_action_params');
//也可以用陣列一次清除多個網頁
clearCache(array('controller_action_params','controller2_action_params));
第三節
幾個要點
下面列出關於暫存功能的幾個要點:
設定 /app/config/core.php檔內的CACHE_CHECK啟動暫存功能。
在想要暫存的view的controller內,將Cache helper加到$helpers陣列中。
使用$cacheAction指定暫存的action。
view裡不想被暫存的內容,用<cake:nocache> </cake:nocache>標籤包起來。
如果資料庫內容改變,Cake會自動清除有用到此內容的暫存資料。
使用clearCache()手動清除一些暫存資料。
沒有留言:
張貼留言