1. 程式人生 > >Smarty3【五】頁面快取

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