Smarty 是一個(gè)出色的PHP模板引擎,它分離了邏輯代碼和user interface。

學(xué)習(xí)和使用Smarty,沒有應(yīng)用到它的緩存技術(shù)是一個(gè)很大的損失,它可以將用戶最終看到的HMTL文件緩存成一個(gè)靜態(tài)的HTML頁(yè),當(dāng)設(shè)定Smarty的cache " /> 你懂的免费,欧美另类jizzhd,亚洲午夜久久久精品影院视色

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

Smarty的配置與高級(jí)緩存技術(shù)分享

前言

Smarty 是一個(gè)出色的php模板引擎,它分離了邏輯代碼和user interface。

學(xué)習(xí)和使用Smarty,沒有應(yīng)用到它的緩存技術(shù)是一個(gè)很大的損失,它可以將用戶最終看到的HMTL文件緩存成一個(gè)靜態(tài)的HTML頁(yè),當(dāng)設(shè)定Smarty的cache屬性為true時(shí),在Smarty設(shè)定的cachetime期內(nèi)將用戶的WEB請(qǐng)求直接轉(zhuǎn)換到這個(gè)靜態(tài)的HTML文件中來(lái),這相當(dāng)于調(diào)用一個(gè)靜態(tài)的HTML文件,給后臺(tái)服務(wù)器減少很多負(fù)擔(dān)。

下載與配置

官方下載:Smarty Download

下載完后,解壓到自己項(xiàng)目的文件目錄下。

復(fù)制代碼 代碼如下:
require('../libs/Smarty.class.php');
$smarty = new Smarty;
//$smarty->force_compile = true; //強(qiáng)迫編譯
$smarty->debugging = true; //調(diào)試
$smarty->caching = true; //開啟緩存
$smarty->cache_lifetime = 120; //緩存存活時(shí)間(秒)

$smarty->cache_dir = MY_SMARTY_DIR . '/cache/' ; //設(shè)置緩存的存放路徑

注意:如果你發(fā)現(xiàn)緩存文件每次瀏覽都會(huì)發(fā)生改變,請(qǐng)看 Smarty的 force_compile , 它會(huì)強(qiáng)迫Smarty每次調(diào)用(重新)編譯模板。這項(xiàng)設(shè)置不受$compile_check的限制。默認(rèn)情況下,它是無(wú)效的。它對(duì)于開發(fā)和調(diào)試很方便.但它決不能使用于產(chǎn)品環(huán)境下.如果啟動(dòng)了緩存,每次將會(huì)重新生成緩存文件.

$smarty->force_compile = false; //強(qiáng)迫編譯

Smarty 緩存技術(shù)

全局緩存
局部緩存
insert 法
動(dòng)態(tài) block 法
插件 block 法

全局緩存技術(shù)

顧名思義,全局緩存就是把整個(gè)頁(yè)面生成緩存文件,指定該緩存文件的存活時(shí)間,在指定時(shí)間內(nèi)再次瀏覽整個(gè)頁(yè)面,將直接讀取緩存文件。
復(fù)制代碼 代碼如下:
$smarty->caching = true; //開啟緩存
$smarty->cache_lifetime = 120; //緩存存活時(shí)間(秒)


注意:一個(gè)模板只能有一個(gè)緩存文件,如果您的模板存在多個(gè)頁(yè)面的話,就要為緩存 設(shè)置一個(gè)ID。 例如一個(gè)頁(yè)面有多個(gè)文章:

http://website/index.php?p=1
http://website/index.php?p=2
復(fù)制代碼 代碼如下:
//$_SERVER['REQUEST_URI']方法
//將當(dāng)前頁(yè)面的URL(包含?后面的所有參數(shù))進(jìn)行md5加密
$url=md5($_SERVER['REQUEST_URI']);
//設(shè)置緩存文件名
$smarty->display('index.tpl',$url);


重點(diǎn):使用緩存技術(shù),很大一個(gè)原因就是為了減少對(duì)數(shù)據(jù)庫(kù)的讀寫,所以我們要用$smarty->isCached('index.tpl')來(lái)判斷緩存是否存在,如果存在了就不要再次操作數(shù)據(jù)庫(kù)。
復(fù)制代碼 代碼如下:
if(!$smarty->isCached('index.tpl')){
echo "ACACHE NO FOUND!";
$sql = "SELECT * FROM test";
$query = mysql_query($sql);
$row = mysql_fetch_row($query);
$smarty->assign("loaddatabase",$row[1]);
}

這里又有問題了,如果我改了數(shù)據(jù)庫(kù)的某個(gè)內(nèi)容,想更新顯示內(nèi)容,但是緩存又還沒到消亡時(shí)間,那該腫么辦呢?
$smarty->clearCache("index.tpl");
上面的clearCache可以解決這個(gè)問題,只要更新了數(shù)據(jù)后,調(diào)用clearCache清除一下緩存就可以了。

PS:我用的是Smarty3版本,這個(gè)版本很多方法的命名都發(fā)生變化了,如果是Smarty2的話會(huì)出現(xiàn)“Call of unknown method ‘isCached'.”,請(qǐng)使用$smarty->is_cached()。
后面出現(xiàn)的 Smarty3:registerPlugin(), Smarty2:register_block() 也一樣是版本的問題。

下面我們來(lái)看一下有緩存和沒緩存的速度比較:
1.首次瀏覽,沒有緩存 Total Time 0.01421

2.第2次瀏覽,有緩存 Total Time 0.00308

這里我的index.php里只有幾行代碼,如果數(shù)據(jù)量大的話,就有明顯的區(qū)別。

局部緩存技術(shù)

局部緩存 = 部分緩存, 就是一個(gè)頁(yè)面的緩存中,并不是全都生成緩存,可以自定義設(shè)置某個(gè)功能模塊不生成緩存,每次瀏覽都會(huì)更新數(shù)據(jù);

例如:網(wǎng)頁(yè)顯示用戶的狀態(tài)、網(wǎng)頁(yè)的統(tǒng)計(jì)數(shù)據(jù)、廣告條等,這些數(shù)據(jù)的更新速度都非常快,不宜緩存,這樣,局部緩存便有用武之地了。

局部緩存有3個(gè)方法:

一、insert法

insert 所包含的內(nèi)容不會(huì)被緩存,每次調(diào)用該模板都會(huì)重新執(zhí)行該函數(shù).

使用方法:

注意這里的函數(shù)名一定要以insert開頭,模板中的name與之對(duì)應(yīng)。

index.php
復(fù)制代碼 代碼如下:
//定義一個(gè)時(shí)間來(lái)測(cè)試insert與普通assign的差別
$date = date("Y-m-d H:i:s");
$smarty->assign("date", $date);
//insert
function insert_get_current_time($date){
return date("Y-m-d H:i:s");
}

index.tpl
復(fù)制代碼 代碼如下:
nocache:{insert name="get_current_time"}
cache: {$date}
[code]
然后看生成的緩存文件:得出結(jié)論 insert 每次調(diào)用該模板都會(huì)重新執(zhí)行該函數(shù)

nocache:<?php echo insert_get_current_time(array (
),$_smarty_tpl);?>

cache: 2012-06-04 15:46:52
復(fù)制代碼 代碼如下:

這種方法簡(jiǎn)單,但是如果要顯示的內(nèi)容是一大塊的,就不宜使用了。

二、動(dòng)態(tài)block 法

php中自定義塊
index.php
[code]
//smarty 3
// function declaration
function smarty_block_nocache ($param,$content,$smarty)
{
return $content;
}
// register with smarty
$smarty->registerPlugin("function","nocache", "smarty_block_nocache");

開始有提到過,Smarty3是用registerPlugin , Smarty2則是用register_block

index.tpl

{nocache}{$date}{/nocache}
然后看緩存文件 , 得出結(jié)論每次調(diào)用該模板都會(huì)重新執(zhí)行$date
[/code]
<?php echo $_smarty_tpl->tpl_vars['date']->value;?>
復(fù)制代碼 代碼如下:
三、插件block 法

這個(gè)方法和第2個(gè)差不多,只是把php中的自定義塊,放到smarty目錄中的plugins文件夾中。

在Smarty/plugins目錄下建一個(gè)文件 block.nocache.php 內(nèi)容如下:

<?php
function smarty_block_nocache($param, $content, $smarty)
{
return $content;
}
?>
[code]
tpl模板中的使用和第二個(gè)方法一樣

總結(jié)
可以總結(jié)出Smarty緩存技術(shù),能大大的提高網(wǎng)站的速度和質(zhì)量,用法也比較簡(jiǎn)單。

最后提醒一下的就是, Smarty生成的緩存文件的擴(kuò)展名雖然是php,但并不會(huì)被當(dāng)作php代碼來(lái)解析.

作者:那瞬間

php技術(shù)Smarty的配置與高級(jí)緩存技術(shù)分享,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 日本久久精品免视看国产成人 | 久久在精品线影院精品国产 | 97麻豆精品国产自产在线观看 | 成人a视频在线观看 | 国产成人精品久久一区二区小说 | 亚洲第一国产 | 久久精品这里热有精品2015 | 在线观看免费视频国产 | 亚洲精品永久www嫩草 | 黄色网在线免费观看 | 国产成人精品999在线观看 | 国色天香成人网 | 级毛片久久久毛片精品毛片 | 84pao强力永久免费高清 | 国产精品日本不卡一区二区 | 亚洲tv精品一区二区三区 | 99精品视频在线播放2 | 麻豆视频91 | 天天色天天射综合网 | 免费国产成人午夜在线观看 | 色多多视频在线观看 | 美女视频黄的全免费视频网站 | 色视频哟女在线观看 | 亚洲精品国产综合久久一线 | 黄网观看 | 国产成人精品日本亚洲网址 | 中文字幕日本一本二本三区 | 亚洲资源在线视频 | 久热中文字幕 | 亚洲福利在线视频 | 91区国产福利在线观看午夜 | 国产精品久久久久久久牛牛 | 免费看黄色的视频 | 国产福利午夜自产拍视频在线 | 亚洲一区二区三区中文字幕 | 四虎影视在线永久免费看黄 | 一区二区三区在线 | 国产精品特黄一级国产大片 | aⅴ一区二区三区无卡无码 aaaaaa精品视频在线观看 | 中日韩一线二线 | 亚洲欧美第一页 |