Smarty Caching緩存

Caching [緩存]

Table of Contents [內容列表]

緩存被用來保存一個文檔的輸出從而加速display()或fetch()函數的執行。如果一個函數被加進緩存,那麼實際輸出的內容將用緩存來代替。緩存可讓事物非常快速的執行,特別是帶有長計算時間的模板。一旦display()或fetch()用緩存輸出,那麼一個緩存文檔將非常容易用幾個模板文檔或是配置文檔等來組成〔功力不小〕。

一旦模板是動態〔應該不難理解〕的,哪些文檔你加了緩存,緩存時間多長都是很重要的。舉個例子,比如你站點的首頁內容不是經常更改,那麼對首頁緩存一個小時或是更長都可得到很好效果。相反,幾分鐘就要更新一下信息的天氣地圖頁面,用緩存就不好了。

Setting Up Caching [建立緩存]

The first thing to do is enable caching. This is done by setting $caching = true (or 1.)
首先要做的就是讓緩存可用。這就要設置$caching = true(或 1.)

Example 14-1. enabling caching
例14-1.使緩存可用

require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching = true;

$smarty->display('index.tpl');

建立緩存後,display('index.tpl')函數會把模板返回原來狀態〔沒緩存〕,也會把輸出保存copy〖n.名詞〗到$cache_dir.下次調用display('index.tpl'),保存的緩存copy〖n.〗會被再用來代替原來的模板。

技術提示:在$chche_dir目錄裏的文檔命名跟模板一致。儘管是用.php作爲擴展名,但並不會被當作php代碼來解析。所以不要去修改它。

每個緩存頁都有一個用$cache_lifetime來控制的會話期。初始值是3600秒,就是一小時〔廢話嘛〕。會話期結束,緩存就會重建。你可以通過設置$caching=2來控制單個緩存文件各自的的過期時間。祥細內容察看$cache_lifetime裏面的列表。

Example 14-2. setting cache_lifetime per cache
例14-2 設置單個緩存會話期〔時間〕

require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching = 2; // lifetime is per cache

// set the cache_lifetime for index.tpl to 5 minutes
$smarty->cache_lifetime = 300;
$smarty->display('index.tpl');

// set the cache_lifetime for home.tpl to 1 hour
$smarty->cache_lifetime = 3600;
$smarty->display('home.tpl');

// NOTE: the following $cache_lifetime setting will not work when $caching = 2.
//提示:在$chching=2後面的$chche_lifetime不會起作用。
// The cache lifetime for home.tpl has already been set
// to 1 hour, and will no longer respect the value of $cache_lifetime.
// home.tpl的緩存會話期設爲1小時後,不會再按$cache_lifetime的值改變。
// The home.tpl cache will still expire after 1 hour.
// home.tpl的緩存會在1小時後結束。$smarty->cache_lifetime = 30; // 30 seconds
$smarty->display('home.tpl');

 
如果$compile_check可用,每個跟緩存文檔相關的模板文檔和配置文檔都會被檢查來確定是否需要修改。在緩存產生後,改動任何文檔,緩存也跟着更新改動。設置$compile_check爲false,這是實現最佳性能的最小改動〔應該是這樣:D〕。

Example 14-3. enabling $compile_check
例14-3.可用$compile_check

require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching = true;
$smarty->compile_check = true;

$smarty->display('index.tpl');

一旦$force_compile可用,緩存文檔會一直重建。這有效地關閉緩存。$force_compile只是用來調試,更有效關閉緩存的方法是讓$caching = false(或0.)

is_cached()函數可用來測試一個模板是否有有效的緩存。如果一個緩存模板需要從數據庫中獲取數據,可以用這個函數來跳過這個過程。

Example 14-4. using is_cached()
例14-4.使用is_cached()

require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching = true;
// www.yiibai.com/smarty
if(!$smarty->is_cached('index.tpl')) {
// No cache available, do variable assignments here.
$contents = get_database_contents();
$smarty->assign($contents);
}

$smarty->display('index.tpl');

你可以插入模板函數insert來使部分頁面動態化。除了在右下方顯示的標語外整個頁面都可以緩存。在緩存內容裏面可以插入函數來使標語也動態化。查看相關文檔關於insert的細節和例子。

你可以用clear_all_cache()來清除所有緩存,或用clear_cache()來清除單個緩存文檔。

Example 14-5. clearing the cache
例14-5.清除緩存

require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching = true;

// clear out all cache files
$smarty->clear_all_cache();

// clear only cache for index.tpl
$smarty->clear_cache('index.tpl');

$smarty->display('index.tpl');