国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - Smarty緩存機制實例詳解【三種緩存方式】

Smarty緩存機制實例詳解【三種緩存方式】

2021-08-10 16:12trkjoy PHP教程

這篇文章主要介紹了Smarty緩存機制,結合實例形式詳細分析了Smarty全局緩存、部分緩存及局部緩存三種緩存實現方式,并附帶說明了Smarty清除緩存的實現方式,需要的朋友可以參考下

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

Smarty模板引擎中強大的緩存機制,緩存機制有效減少了系統對服務器的壓力,而這也是很多開發者喜歡Smarty的原因之一,附錄中講解了設置緩存及清除緩存的技巧方法(其中包含緩存集合方法)。

一、Smarty緩存的幾種方式

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

?
1
2
3
4
5
6
7
$smarty->Smarty();
$smarty->template_dir = $ROOT."/templates";//模板目錄
$smarty->compile_dir = $ROOT."/templates_c";//編譯目錄
$smarty->cache_dir = $ROOT."/cache";//緩存目錄
$smarty->caching = true;//是否開啟緩存,值為0,1,2,0則不開啟:1則開啟緩存:2則可設置特殊緩存,即在加載模板頁前,對局部進行緩存時間的特殊設定,后面會講到;可不寫,默認為true-開啟
$smarty->cache_lifetime = "3600";//緩存時間 ,可不寫,默認為3600
$smarty->compile_check = true;//是否進行編譯,可不寫,默認為true

緩存機制中調用模板生成緩存頁面,用的一個display()方法,將會在后文中用到,這里先講解一下:

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

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

上面代碼簡潔、說明易懂吧!若引用創建Smarty類都不知,那下面可以省了,呵,開個玩笑!接著往下看。

1、全局緩存方式

定義:字面上看,意思很明了,就是為整個網站的全部頁面都進行緩存生成,只要頁面調用了Smarty類模板。

代碼實例:其實,在這段之前的基本目錄設置中就講到了,為說明,用藍顏色標明了出來代碼,只要在類中這樣設置,并在頁面中進行如下引用,頁面即進行了緩存,

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

而這條語句,有一個很大的缺陷,就是一個模板即一個模板頁面,只生成一個緩存,而我們知道,大多網站的多數頁面后面會接一些參數或不同頁面調用同一個模板,比如:

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

比方這些是調用的同一個模板生成的頁面,但是又必須生成3個緩存,使用上面的語句肯定做不到,這里我們要想到一開始講到的第二個可選參數cache_id,用一個緩存號,來區分同一個模板生成不同的頁面及緩存,代碼實例:

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

到這里,有人發現,如果我的頁面不止一個參數,那是不是得全部解析出來并做為緩存號?這里有一個更好的方法,推薦給大家,也是網上大多贊同的。(其實,上面一段是'廢話',可去掉,但為了循序漸進,更好理解而寫的過渡,諒)

推薦的方法是:你可以直接將整個當前URL獲取下來,作為cache_id加入緩存,這樣無論它多少個參數,都不會存在同一個緩存頁,

代碼實例:

?
1
2
$url=$_SERVER['REQUEST_URI'];//獲取當前頁URL,有的將url進行md5加密,亦可
$smarty->display('index.tpl', $url);

2、部分緩存方式

定義:意思就是,網站系統的部分頁面進行緩存,而一些頁面不進行緩存,比方網站的注冊、登錄處理頁面可不進行緩存。

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

代碼實例:

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

另一種處理方式:原理是一樣的,因為部分緩存相當于兩種情況,你可以另寫一個display方法進行重構,其中一個參數判斷是否進行緩存,若不,則進行clear_cache()方法處理,否則進行緩存;

代碼實例:

?
1
2
3
4
5
6
7
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);//此兩句不解,見上面綠色代碼
}else{
$smarty->display("index.tpl", $cache_id);
}}

調用方法:

?
1
2
self::display($temp_name, $cache_id, false);
//這樣設置即不進行緩存,有任何疑問可留言提出。

3、局部緩存方式

定義:一個頁面,一些地方不進行緩存,保持動態更新,每次都加載,比如文章詳細頁的瀏覽次數、登錄窗口框等。

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

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

直接在tpl或html模板頁中,不緩存區域加入{nocache}不緩存內容{/nocache}即可。
代碼實例:

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

模板頁面:{nocache}<{$time}>{/nocache}

b、注冊塊方法,實現不緩存

寫一個no_cached方法,并調用smarty注冊塊函數將方法進行注冊,即可實現,直接貼實例。

代碼實例:

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

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

模板頁面:{no_cached}<{$time}>{/no_cached}

c、當然還有其他一些方法,比如:注冊函數等,這里就不介紹了,其中注冊塊詳細使用,請查看smarty說明書,這里就不詳述了。

4、緩存機制中的is_cached用法

最后,說下is_cached($temp_tpl[, $cache_id])判斷是否已被緩存這個方法,$temp_tpl參數為模板頁,$cache_id參數為緩存號,這個方法主要用在加載模板前進行緩存判斷,若不存在就加載數據,若存在直接跳過,這樣就達到了緩存的最終目的。

示例:

?
1
2
3
4
if(!smarty->is_cached('index.tpl')){//不存在緩存
//調用數據庫,并對變量進行賦值
}
$smarty->display('index.tpl');//加載模板頁

以上為Smarty的三種緩存

附:Smarty清除緩存方法

一、普通清除緩存方法

通過如下方法,對Smarty的緩存進行清除:

代碼示例:

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

這樣就存在一個問題,比方網站有一個欄目:http://blog.unvs.cn/archives/php/,我只想清除這一個欄目的頁面緩存而不想全部清除或一個頁面緩存,這種情況經常會碰到,那么,接下來會講到Smarty引擎中強大的緩存集合方法。

二、清除緩存集合方法

Smarty中文教程是這樣描述的:可以通過建立cache_id集合做更詳細的集合體,在cache_id集合里用豎線"|"來分開子集合。可以盡可能多的包含子集合。

上面解釋的有點云里霧里,簡單點說,就是在建立緩存中,將cache_id以一個帶集合標識保存,用豎線隔開集合標識與緩存編號,而不僅僅是單一緩存編號,如:

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

這里添加一個緩存文件如何命名知識點,緩存文件命名生成規則:集合名稱^_Site目錄_頁面名稱_參數_頁面名稱編碼md5加密

如下圖所示:

Smarty緩存機制實例詳解【三種緩存方式】

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

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

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

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

好了,關于Smarty緩存機制原理的講解就完成了,當然這些只是實際開發常用的應用技巧,還有更多與緩存相關的函數、塊什么的,不過掌握這些,相信Smarty緩存就可以運用自如了。

希望本文所述對大家基于smarty模板的PHP程序設計有所幫助。

原文鏈接:https://www.cnblogs.com/trkjoy/articles/5173073.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久国产精品久久久久久久久久 | 性色网站| 久久女人网 | 欧美精品久久一区 | 免费一二三区 | 国产一区二区亚洲 | 欧美一级片 | 中文字幕第一区 | 中文字幕在线一区 | 国产亚洲精品久久久久动 | 日韩av在线一区 | 午夜激情在线播放 | av天天网 | 欧美一区二区在线播放 | 欧美精品成人 | 亚洲国产成人av好男人在线观看 | 国产日韩精品一区 | 中文字幕在线免费 | 国产成人一区 | 亚洲精选一区 | 久久品 | 91av视频免费在线观看 | av免费观看网站 | 国产精品一区三区 | 久久一日本道色综合久久 | 亚洲国产精品99久久久久久久久 | 日韩在线视频观看 | 国产精品福利午夜在线观看 | 一区二区三区视频免费在线观看 | 国产无套丰满白嫩对白 | 国产在亚洲 线视频播放 | 日韩中文字幕一区二区高清99 | 国产中文字幕在线观看 | 欧美一区二区三区在线观看视频 | 极品国产精品 | 日韩在线免费观看网站 | 欧美成人h版在线观看 | 日韩无在线| 久久91精品 | 国产一区在线不卡 | 亚洲一区二区在线免费观看 |