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.tw511.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');