2007年5月15日 星期二

CakePHP使用手冊-暫存機制(Cache)

轉貼自 http://www.ezluk.org/

第一節



這是什麼?


從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));





第三節



幾個要點


下面列出關於暫存功能的幾個要點:




  1. 設定 /app/config/core.php檔內的CACHE_CHECK啟動暫存功能。




  2. 在想要暫存的view的controller內,將Cache helper加到$helpers陣列中。




  3. 使用$cacheAction指定暫存的action。




  4. view裡不想被暫存的內容,用<cake:nocache> </cake:nocache>標籤包起來。




  5. 如果資料庫內容改變,Cake會自動清除有用到此內容的暫存資料。




  6. 使用clearCache()手動清除一些暫存資料。




沒有留言:

網誌存檔

關於我自己

Aspire freedom , Hope to do Soming make self complete ~