主頁(yè) > 知識(shí)庫(kù) > Smarty緩存機(jī)制實(shí)例詳解【三種緩存方式】

Smarty緩存機(jī)制實(shí)例詳解【三種緩存方式】

熱門標(biāo)簽:怎么向銷售公司推銷外呼系統(tǒng) 廣東地市地圖標(biāo)注 仁和怎么申請(qǐng)400開(kāi)頭的電話 長(zhǎng)春人工外呼系統(tǒng)服務(wù)商 哪里辦理400電話 廣州防封卡外呼系統(tǒng)多少錢一個(gè)月 江西手機(jī)自動(dòng)外呼防封系統(tǒng)是什么 高德地圖標(biāo)注家 外呼系統(tǒng)撥打暫時(shí)無(wú)法接通

本文實(shí)例講述了Smarty緩存機(jī)制。分享給大家供大家參考,具體如下:

Smarty模板引擎中強(qiáng)大的緩存機(jī)制,緩存機(jī)制有效減少了系統(tǒng)對(duì)服務(wù)器的壓力,而這也是很多開(kāi)發(fā)者喜歡Smarty的原因之一,附錄中講解了設(shè)置緩存及清除緩存的技巧方法(其中包含緩存集合方法)。

一、Smarty緩存的幾種方式

緩存機(jī)制中,分為全局緩存、部分緩存、局部緩存三種方式,后面會(huì)一一講述,下面是緩存設(shè)置前,Smarty類方法基本目錄設(shè)置如下:

$smarty->Smarty();
$smarty->template_dir = $ROOT."/templates";//模板目錄
$smarty->compile_dir = $ROOT."/templates_c";//編譯目錄
$smarty->cache_dir = $ROOT."/cache";//緩存目錄
$smarty->caching = true;//是否開(kāi)啟緩存,值為0,1,2,0則不開(kāi)啟:1則開(kāi)啟緩存:2則可設(shè)置特殊緩存,即在加載模板頁(yè)前,對(duì)局部進(jìn)行緩存時(shí)間的特殊設(shè)定,后面會(huì)講到;可不寫,默認(rèn)為true-開(kāi)啟
$smarty->cache_lifetime = "3600";//緩存時(shí)間 ,可不寫,默認(rèn)為3600
$smarty->compile_check = true;//是否進(jìn)行編譯,可不寫,默認(rèn)為true

緩存機(jī)制中調(diào)用模板生成緩存頁(yè)面,用的一個(gè)display()方法,將會(huì)在后文中用到,這里先講解一下:

$smarty->display(string template[, string cache_id[, string compile_id]]);

第一個(gè)必須參數(shù):template,為需顯示的模板;
第二個(gè)可選參數(shù):cache_id,可指定一個(gè)緩存號(hào),此參數(shù)是給頁(yè)面緩存添加一個(gè)標(biāo)識(shí)的作用;
第三個(gè)可選參數(shù):compile_id,可指定一個(gè)編譯號(hào) ,此參數(shù)是把一個(gè)模板編譯成不同版本時(shí)使用,同樣是起一個(gè)標(biāo)識(shí)的作用,不常用。

上面代碼簡(jiǎn)潔、說(shuō)明易懂吧!若引用創(chuàng)建Smarty類都不知,那下面可以省了,呵,開(kāi)個(gè)玩笑!接著往下看。

1、全局緩存方式

定義:字面上看,意思很明了,就是為整個(gè)網(wǎng)站的全部頁(yè)面都進(jìn)行緩存生成,只要頁(yè)面調(diào)用了Smarty類模板。

代碼實(shí)例:其實(shí),在這段之前的基本目錄設(shè)置中就講到了,為說(shuō)明,用藍(lán)顏色標(biāo)明了出來(lái)代碼,只要在類中這樣設(shè)置,并在頁(yè)面中進(jìn)行如下引用,頁(yè)面即進(jìn)行了緩存,

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

而這條語(yǔ)句,有一個(gè)很大的缺陷,就是一個(gè)模板即一個(gè)模板頁(yè)面,只生成一個(gè)緩存,而我們知道,大多網(wǎng)站的多數(shù)頁(yè)面后面會(huì)接一些參數(shù)或不同頁(yè)面調(diào)用同一個(gè)模板,比如:

http://blog.unvs.cn/archives/2012_9.html
http://blog.unvs.cn/archives/2012_8.html
http://blog.unvs.cn/archives/2012_7.html

比方這些是調(diào)用的同一個(gè)模板生成的頁(yè)面,但是又必須生成3個(gè)緩存,使用上面的語(yǔ)句肯定做不到,這里我們要想到一開(kāi)始講到的第二個(gè)可選參數(shù)cache_id,用一個(gè)緩存號(hào),來(lái)區(qū)分同一個(gè)模板生成不同的頁(yè)面及緩存,代碼實(shí)例:

$cache_id = $_GET['id'];//url中的id參數(shù)值
$smarty->display('index.tpl', $cache_id);//將緩存號(hào)加入,即可完成–同一模板–不同參數(shù)–不同緩存 的功能;

到這里,有人發(fā)現(xiàn),如果我的頁(yè)面不止一個(gè)參數(shù),那是不是得全部解析出來(lái)并做為緩存號(hào)?這里有一個(gè)更好的方法,推薦給大家,也是網(wǎng)上大多贊同的。(其實(shí),上面一段是'廢話',可去掉,但為了循序漸進(jìn),更好理解而寫的過(guò)渡,諒)

推薦的方法是:你可以直接將整個(gè)當(dāng)前URL獲取下來(lái),作為cache_id加入緩存,這樣無(wú)論它多少個(gè)參數(shù),都不會(huì)存在同一個(gè)緩存頁(yè),

代碼實(shí)例:

$url=$_SERVER['REQUEST_URI'];//獲取當(dāng)前頁(yè)URL,有的將url進(jìn)行md5加密,亦可
$smarty->display('index.tpl', $url);

2、部分緩存方式

定義:意思就是,網(wǎng)站系統(tǒng)的部分頁(yè)面進(jìn)行緩存,而一些頁(yè)面不進(jìn)行緩存,比方網(wǎng)站的注冊(cè)、登錄處理頁(yè)面可不進(jìn)行緩存。

一種處理方式:在display()方法前或后面,將此模板緩存進(jìn)行一次清除操作,注意保持兩者參數(shù)必須一致;

代碼實(shí)例:

$smarty->clear_cache("index.tpl");//此句放在display方法句前后都可以
$smarty->display("index.tpl");//與clear_cache方法參數(shù)必須一致

另一種處理方式:原理是一樣的,因?yàn)椴糠志彺嫦喈?dāng)于兩種情況,你可以另寫一個(gè)display方法進(jìn)行重構(gòu),其中一個(gè)參數(shù)判斷是否進(jìn)行緩存,若不,則進(jìn)行clear_cache()方法處理,否則進(jìn)行緩存;

代碼實(shí)例:

function display($temp_name, $cache_id = null,$is_cache = true){
if($is_cache){
$smarty->clear_cache("index.tpl", $cache_id);
$smarty->display("index.tpl", $cache_id);//此兩句不解,見(jiàn)上面綠色代碼
}else{
$smarty->display("index.tpl", $cache_id);
}}

調(diào)用方法:

self::display($temp_name, $cache_id, false);
//這樣設(shè)置即不進(jìn)行緩存,有任何疑問(wèn)可留言提出。

3、局部緩存方式

定義:一個(gè)頁(yè)面,一些地方不進(jìn)行緩存,保持動(dòng)態(tài)更新,每次都加載,比如文章詳細(xì)頁(yè)的瀏覽次數(shù)、登錄窗口框等。

有幾種可實(shí)現(xiàn)局部緩存的方法(反面即處理好不緩存的地方就可實(shí)現(xiàn)局部緩存),著重講解1、2種方法,我覺(jué)得就可以了,不用學(xué)會(huì)那么多。

a、使用SMarty引擎中內(nèi)置的nocache函數(shù),實(shí)現(xiàn)不緩存功能(smarty3.1.8版支持,不知smarty2+是否支持)

直接在tpl或html模板頁(yè)中,不緩存區(qū)域加入{nocache}不緩存內(nèi)容{/nocache}即可。
代碼實(shí)例:

處理頁(yè)面:$smarty->assign("time",time());

模板頁(yè)面:{nocache}{$time}>{/nocache}

b、注冊(cè)塊方法,實(shí)現(xiàn)不緩存

寫一個(gè)no_cached方法,并調(diào)用smarty注冊(cè)塊函數(shù)將方法進(jìn)行注冊(cè),即可實(shí)現(xiàn),直接貼實(shí)例。

代碼實(shí)例:

處理頁(yè)面:$smarty->assign("time",time());

function no_cached($param, $content){//參數(shù)$param為塊參數(shù)數(shù)組,參數(shù)$content為不緩存內(nèi)容
return $content;
}
$smarty->register_block("no_cached", "no_cached", false);//注冊(cè)塊方法:register_block($tpl_func, $reg_func, $cacheable);//參數(shù)1為模板函數(shù);參數(shù)2為需注冊(cè)的函數(shù)即上面寫的函數(shù);參數(shù)3為是否進(jìn)行緩存,這里必須設(shè)置為false

模板頁(yè)面:{no_cached}{$time}>{/no_cached}

c、當(dāng)然還有其他一些方法,比如:注冊(cè)函數(shù)等,這里就不介紹了,其中注冊(cè)塊詳細(xì)使用,請(qǐng)查看smarty說(shuō)明書,這里就不詳述了。

4、緩存機(jī)制中的is_cached用法

最后,說(shuō)下is_cached($temp_tpl[, $cache_id])判斷是否已被緩存這個(gè)方法,$temp_tpl參數(shù)為模板頁(yè),$cache_id參數(shù)為緩存號(hào),這個(gè)方法主要用在加載模板前進(jìn)行緩存判斷,若不存在就加載數(shù)據(jù),若存在直接跳過(guò),這樣就達(dá)到了緩存的最終目的。

示例:

if(!smarty->is_cached('index.tpl')){//不存在緩存
//調(diào)用數(shù)據(jù)庫(kù),并對(duì)變量進(jìn)行賦值
}
$smarty->display('index.tpl');//加載模板頁(yè)

以上為Smarty的三種緩存

附:Smarty清除緩存方法

一、普通清除緩存方法

通過(guò)如下方法,對(duì)Smarty的緩存進(jìn)行清除:

代碼示例:

$smarty->clear_cache("index.tpl");//清除一個(gè)模板的緩存;
$smarty->clear_cache("index.tpl", $cache_Id);//清除一個(gè)帶緩存編號(hào)的緩存;如:頁(yè)面http://www.abc.com/index.asp?act=login,可以將$cache_id設(shè)為login;
$smarty->clear_all_cache();//清除所有緩存,即緩存目錄下所有緩存文件;

這樣就存在一個(gè)問(wèn)題,比方網(wǎng)站有一個(gè)欄目:http://blog.unvs.cn/archives/php/,我只想清除這一個(gè)欄目的頁(yè)面緩存而不想全部清除或一個(gè)頁(yè)面緩存,這種情況經(jīng)常會(huì)碰到,那么,接下來(lái)會(huì)講到Smarty引擎中強(qiáng)大的緩存集合方法。

二、清除緩存集合方法

Smarty中文教程是這樣描述的:可以通過(guò)建立cache_id集合做更詳細(xì)的集合體,在cache_id集合里用豎線"|"來(lái)分開(kāi)子集合??梢员M可能多的包含子集合。

上面解釋的有點(diǎn)云里霧里,簡(jiǎn)單點(diǎn)說(shuō),就是在建立緩存中,將cache_id以一個(gè)帶集合標(biāo)識(shí)保存,用豎線隔開(kāi)集合標(biāo)識(shí)與緩存編號(hào),而不僅僅是單一緩存編號(hào),如:

$smarty->display("index.tpl", "category|".$cache_id);
//前面加了一個(gè) category| 的前綴,表明將把緩存編號(hào)為$cache_id保存在category集合里,可以理解為分組;

這里添加一個(gè)緩存文件如何命名知識(shí)點(diǎn),緩存文件命名生成規(guī)則:集合名稱^_Site目錄_頁(yè)面名稱_參數(shù)_頁(yè)面名稱編碼md5加密

如下圖所示:

(category屬于一個(gè)集合,index屬于一個(gè)集合)

剛將了集合的生成,下面關(guān)鍵如何清除集合下的緩存,方法如下:

$smarty->clear_cache(null, "category");
//注意模板文件參數(shù)為null,""都不可以。

以上就完成了集合緩存的生成與清除,其實(shí),網(wǎng)上也有這樣一種方法:給一個(gè)欄目新建一個(gè)目錄,比方news欄目,緩存生成放到一個(gè)news的緩存文件夾,這點(diǎn)不難,然后需要清除此欄目緩存時(shí),緩存路徑指向news即可。這個(gè)方法可行,個(gè)人覺(jué)得靈活性不高。

好了,關(guān)于Smarty緩存機(jī)制原理的講解就完成了,當(dāng)然這些只是實(shí)際開(kāi)發(fā)常用的應(yīng)用技巧,還有更多與緩存相關(guān)的函數(shù)、塊什么的,不過(guò)掌握這些,相信Smarty緩存就可以運(yùn)用自如了。

更多關(guān)于Smarty相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《smarty模板入門基礎(chǔ)教程》、《PHP模板技術(shù)總結(jié)》、《PHP基于pdo操作數(shù)據(jù)庫(kù)技巧總結(jié)》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《PHP基本語(yǔ)法入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》

希望本文所述對(duì)大家基于smarty模板的PHP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • Smarty模板引擎緩存機(jī)制詳解
  • PHP模板引擎Smarty的緩存使用總結(jié)
  • Smarty局部緩存的幾種方法簡(jiǎn)介
  • Smarty的配置與高級(jí)緩存技術(shù)分享
  • smarty 緩存控制前的頁(yè)面靜態(tài)化原理
  • php smarty模版引擎中的緩存應(yīng)用
  • php smarty模版引擎中的緩存應(yīng)用
  • smarty緩存用法分析
  • smarty模板局部緩存方法使用示例
  • PHP文件緩存smarty模板應(yīng)用實(shí)例分析
  • Smarty高級(jí)應(yīng)用之緩存操作技巧分析

標(biāo)簽:黔東 文山 濮陽(yáng) 廈門 梅河口 惠州 湘西 海北

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Smarty緩存機(jī)制實(shí)例詳解【三種緩存方式】》,本文關(guān)鍵詞  Smarty,緩存,機(jī)制,實(shí)例,詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Smarty緩存機(jī)制實(shí)例詳解【三種緩存方式】》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Smarty緩存機(jī)制實(shí)例詳解【三種緩存方式】的相關(guān)信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章