Smarty 建立緩存


Setting Up Caching [建立緩存]

首先要做的就是讓緩存可用。這就要設置$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()函數可用來測試一個模板是否有有效的緩存。如果一個緩存模板需要從數據庫中獲取數據,可以用這個函數來跳過這個過程。


例14-4.使用is_cached()

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

$smarty->caching = true;

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