Smarty3【五】頁面快取
頁面快取是什麼意思?它是把頁面內容儲存在磁碟上,在下次訪問相同的頁面的時候,直接返回儲存的內容,減輕了資料庫的壓力。Smarty3通過將輸出內容儲存到檔案內,快取機制可以用來加速 display()的執行。 如果快取被開啟,那麼顯示時快取的輸出將替代重新生成顯示內容的操作。 快取可以極大提高程式的執行速度,尤其當模板需要很長的計算時間的情況下,因為可能要走資料庫又要進行一系列的處理,如果快取頁面後,就可以直接走快取的檔案。
一 簡單使用快取
[1]開啟快取
[2]配置快取的目錄以及快取的生命週期
[3]判斷該頁面是否快取,或者是要走資料庫取出資料
[4]顯示頁面
//這裡是引入上一次的簡單繼承的Smarty主類 include './MySmarty.class.php'; //例項化 smarty類 $smarty = new MySmarty(); //開啟快取 $smarty->caching = true; //設定快取週期 $smarty->cache_lifetime=10; //配置快取的目錄 $smarty->cache_dir = './cache'; //判斷是否快取 if(!$smarty->isCached('1.html')){ echo '走資料庫,哈哈哈哈哈'; $user = array('name'=>'王小蟲','age'=>'20'); $smarty->assign('user',$user); } //顯示頁面 $smarty->display('1.html');
二 區域性快取頁面
區域性快取的意思就是,頁面中有一部分我不去快取它,需要它動態變化。就比如說購物網站裡面的商品頁面,可能商品的價格會動態變化,但是其他基本上都不變,那麼我們只需要就獲取它的價格,而頁面其他部分的我們就用快取。其實區域性快取的一個大致意思就是,整個頁面要快取,那麼你控制一下那些不去快取就好了。
這裡有四種常用的區域性快取方法
[1]使用nocache針對某個值進行設定不快取
[2]使用{nocache}{/nocache}實現大區塊的不快取
[3]在php的頁面裡利用assign賦值的時候加上第三個引數true
[4]在php頁面寫一個函式,然後利用{insert name="function" }進行插入
//引入上一次的簡單繼承的Smarty的主類
include './MySmarty.class.php';
//例項化 smarty類
$smarty = new MySmarty();
//開啟快取
$smarty->caching = true;
//設定快取週期
$smarty->cache_lifetime=10;
//配置快取的目錄
$smarty->cache_dir = './cache';
//判斷是否快取,並且從資料庫取出資料
if(!$smarty->isCached('2.html')){
echo '走資料庫,哈哈哈哈哈';
$user = array('name'=>'王小蟲','age'=>'20');
$smarty->assign('user',$user);
}
//四種 區域性快取的方法
$smarty->assign('time',time()); //【1】時間不快取 在頁面裡面 使用加nocache設定
$smarty->assign('num',rand(10,99)); //【2】隨機數 在頁面裡面 利用{nocache}{/nocache}
$smarty->assign('ccc',mt_rand(),true);//【3】在賦值的時候就加上第三個引數 true 設定不快取
//【4】在頁面裡面寫一個函式 ,然後再html插入 {insert name="函式名" $param}
function insert_ddd($param){
return '隨機編號user:'. "----".$param['user']."------" .md5(uniqid());
}
$smarty->display('2.html');
<!DOCTYPE html>
<html lang="en">
<head>
<title>2_區域性快取</title>
<meta charset="utf-8">
</head>
<body>
<pre>
時間: {$time|date_format:"%y-%m-%d %H:%M:%S" nocache}
隨機數:{nocache}{$num}{/nocache}
{$ccc}
插入函式:{insert name="ddd" user="Tacks"}
<hr/>
{$user.name}
{$user.age}
</pre>
</body>
</html>
三 單頁面多快取
單頁面多快取,意思就是同樣的一個模板,但是想根據get的值或影響因素不一樣,然後去生成不同的頁面快取。舉個例子,商品頁的id就是不一樣的,所以這裡使用單頁面多快取,去實現傳的id不同而有對應的商品頁。
但是一定要確保id的值要唯一,即不同的商品對應不同的id,這樣根據id快取下來的頁面才有不一樣的效果
include './MySmarty.class.php';
//例項化 smarty類
$smarty = new MySmarty();
//開啟快取
$smarty->caching = true;
//設定快取週期
$smarty->cache_lifetime=10;
//配置快取的目錄
$smarty->cache_dir = './cache';
//接受傳過來的id
$id = $_GET['id'] + 0;
//判斷是否快取,並且從資料庫取出資料
if(!$smarty->isCached('3.html',$id)){
echo '走資料庫,哈哈哈哈哈';
$user = array('name'=>'王小蟲','age'=>'20');
$smarty->assign('user',$user);
}
$smarty->display('3.html',$id);//id要確保唯一
<!DOCTYPE html>
<html lang="en">
<head>
<title>3_單頁面多快取</title>
<meta charset="utf-8">
</head>
<body>
<pre>
姓名:{$user['name']}
年齡:{$user['age']}
編號id:{$smarty.get.id}
</pre>
</body>
</html>
四 清除快取
快取檔案也是php,它也不會自己刪除,一旦快取過多的時候,一個資料夾下面過多的小檔案會影響網站的效能,那麼就需要按時手動清除一下,那麼如何清除。主要就是利用clearCache()方法 和clearAllCache()方法
利用$smarty->clearCache('1.html') 兩個引數 模板名 和 快取id
[1]如果只指定模板名,不指定快取id,則改模板對應的所有快取都會被刪除
[2]也可以刪除快取的時候,傳快取id,刪除指定的快取檔案
也可以利用 $smarty->clearAllCache(),清除所有的快取。
有時候我們為了測試頁面,而不需要使用快取,但是又不想修改程式碼,那麼我們可以暫時關閉快取
$smarty->force_cache = true
小結
[1]學會把快取的配置項頁加入到繼承smarty類的裡面
[2]學會合理使用生成快取頁面,單頁面多快取很重要,以及區域性快取
[3]理解快取傳過去的id,最好確保id的唯一性,比如那些因素會影響頁面的內容,就把那些引數結合在一起生成一個唯一id