程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> Smarty緩存技術總結

Smarty緩存技術總結

編輯:關於PHP編程

大家應該都知道合理使用緩存能有效的減輕網站的服務器壓力,php Smarty作為一個非常優秀的php模板引擎,它為我們提供了非常簡單而多樣化的緩存操作,下面就讓我們學習一下smarty緩存操作方面的一些技巧。這裡我們將分析一下如何開啟和使用smarty緩存,如何清除smarty緩存以及smarty的全局緩存,部分緩存,局部緩存三種緩存機制。

一、開啟和使用smarty緩存

要開啟smarty的緩存,只需在smarty設置參數裡面將caching設為true,並指定cache_dir即可。同時設置cache_lefetime參數指定緩存生存時間(單位為秒)。如果要對相同頁面生成多個不同的緩存,可以在display或fetch中加入第二參數cache_id,如:

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

此特性可用於對不同的$_GET進行不同的緩存。
 
二、清除smarty緩存

清除smarty緩存一般有以下幾種方式:

clear_all_cache();//清除所有緩存
clear_cache('index.tpl');//清除指定模板index.tpl的緩存
clear_cache('index.tpl',cache_id);//清除指定模板指定id的緩存

三、全局緩存

全局緩存就是為整個網站的全部頁面都生成緩存頁面。設置全局緩存首先我們要操作smarty的配置文件,開啟緩存,指定緩存文件目錄,並設置緩存的存活時間,設置參數如下:

$smarty->cache_dir='./cache/'; //設置存放緩存文件的文件夾
$smarty->caching=1;//開啟緩存 0、FALSE代表關閉|非0數字、TRUE代表開啟
$smarty->cache_lifetime=3600//單位為秒(如果填寫-1為永不過期)

接下來我們要去具體的php頁面設置與之對應的具體緩存文件的名字,在php頁面中可按如下寫法:

$smarty->display('list2.html',md5($_SERVER['REQUEST_URI']));//將當前頁面的URL(包含?後面的所有參數)進行md5加密然後設置緩存文件名

需要注意的是:

$smarty->display('與之對應的模板文件名','緩存文件名的補充部分')這個方法。

第二個參數不是必須的,如果不寫的話,緩存文件名就是模板文件名經過加密處理後的文件。但是這樣會碰到一個比較棘手的問題,例如:

http://www.phpernote.com/article.php?id=5

http://www.phpernote.com/article.php?id=7

這兩個個URL對應應該的不同的內容,但是生成的緩存文件名都是 article 加密後的結果。這就會導致用戶想要查詢的是不同的內容,訪問的卻是同一個緩存文件。所以建議加上一個輔助參數,將訪問url(包含?後面的所有參數)md5加密是比較靠譜的一種做法。

四、部分緩存

部分緩存就是指定一些文件生成緩存文件,而非網站的全部文件。部分緩存的實質其實是部分不緩存,也就是說不是指定哪些文件生成緩存,而是指定具體一些文件不生成緩存。現在假設有3個文件:

http://www.phpernote.com/index.php //需要緩存

http://www.phpernote.com/cate.php //需要緩存

http://www.phpernote.com/article.php //不需要緩存

前面兩個文件的php文件裡面還是需要寫上$smarty->display('與之對應的模板文件名','緩存文件名的補充部分')這句。

但在第三個文件中我們要特別指明不需要生成緩存,具體的方法是在display指定模板之前寫上下面這段代碼:

$smarty->clear_cache('與之對應的模板文件名');//其實寫在$smarty->display('與之對應的模板文件名')之前還是之後都可以

當然$smarty->display('與之對應的模板文件名')還是要寫,本來就不想生成緩存,第二個參數也就不需要了。

注意:$smarty->clear_cache()和$smarty->display()的參數一定要寫成一致的

五、局部緩存

局部緩存就是指定同一頁面下的某些局部地方生成緩存。其實它不是指定哪些局部生成緩存,而是哪些局部不生成緩存(這和部分緩存的操作思想是類似的)。我們先來看下面一個例子:

article.php 文件部分內容如下:

<?php
$time=time();
$smarty->assign('time',$lanmuarr);
function insert_timeget(){
	return time();
}
$smarty->display('article.html');

對應模板文件article.html部分代碼如下:

<body>
{$time}<!--開啟緩存後,重復刷新這個值不會變-->
{insert name='timeget'}<!--開啟緩存後,重復刷新這個值會變-->
</body>

這裡對上面的例子做一下解釋:在PHP中我們只要定義了函數名為 insert_ (注意下劃線)自定義補充名的自定義函數,在其中返回的值,不需要assign()方法傳遞,就能直接在模板頁面中以{insert name='自定義補充名'}的方式調用,同時不會受到緩存的影響,而實時刷新。

另外補充的一下是如果你感覺使用 smarty 緩存不夠爽的話,還可以使用自定義緩存,如何使用自定義緩存呢?

這裡需要設置cache_handler_func使用自定義的函數處理緩存,如:

$smarty->cache_handler_func="myCache";
function myCache($action,&$smarty_obj,&$cache_content,$tpl_file=null,$cache_id=null,$compile_id=null){
	switch($action){
		case "read"://讀取緩存內容
		case "write"://寫入緩存
		case "clear"://清空
	}
}

具體這裡就不多說了,讀者可以參考相關文檔,作者對這個了解也不是很清楚,怕分享出來誤人哎。

您可能感興趣的文章

  • PHP緩存技術詳解
  • Mysql 數據庫緩存cache功能分析,調試以及性能總結
  • 網頁緩存控制 Cache-control 常見的取值有private、no-cache、max-age、must-revalidate 介紹
  • smarty include file 使用變量的方法
  • smarty變量操作符總結
  • smarty模板中給信息添加最新標簽
  • PHP緩存操作實例詳解
  • Smarty模板變量操作符總結

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved