Smarty缓存机制示例详细说明[三种缓存方法]
本文通过实例说明了Smarty缓存机制。分享给大家参考,如下:
Smarty模板引擎中强大的缓存机制有效降低了系统对服务器的压力,这也是很多开发者喜欢Smarty的原因之一。附录解释了设置缓存和清除缓存的技术(包括缓存收集方法)。
一、Smarty缓存的几种方式
缓存机制分为三种方式:全局缓存、部分缓存和本地缓存,这将在后面描述。以下是Smarty类方法在缓存设置之前的基本目录设置:
$ Smarty-Smarty();$smarty-template_dir=$ROOT。/templates ';//模板目录$ smarty-compile _ dir=$ root。/templates _ c ';//编译目录$ smarty-cache _ dir=$ root。/cache ';//缓存目录$ smarty-cache=true;//是否打开缓存,如果值为0,1,2,0,则不打开;1、缓存将被打开;2、可以设置特殊缓存,即在加载模板页面之前会在本地设置特殊缓存时间,后面会介绍;不写,默认为真-开启$ smarty-cache _ lifetime=' 3600 ';//缓存时间,无法写入。默认值为3600美元smarty-compile_check=true。//不管编译不编译,不写。默认情况下,这是真的。在缓存机制中,调用模板来生成缓存页面。稍后将使用display()方法。这里,我们先解释一下:
$smarty-display(字符串模板[,字符串cache_id[,字符串compile _ id]]);第一个需要的参数是模板,是要显示的模板;第二个可选参数:cache_id,可以指定缓存号。此参数用于向页面缓存添加标识符。第三个可选参数:compile_id,可以指定编译号。将模板编译为不同版本时,将使用此参数。它也用作标识符,不常用。
以上代码简洁易懂。如果不知道如何引用创建Smarty类,可以保存以下,哦,开玩笑!继续往下看。
1.全局缓存模式
定义:字面意思很明确,就是整个网站的所有页面都是缓存生成的,只要页面调用Smarty类模板即可。
代码示例:其实在这一段之前的基本目录设置中就提到过。为便于说明,代码用蓝色标记。只要它是在类中设置的,并且在页面中进行了以下引用,页面就会被缓存。
$ 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
例如,这些页面是由调用的同一个模板生成的,但是必须生成三个缓存,这在上面的语句中是绝对不可能的。在这里,我们要想到开头提到的第二个可选参数cache_id,并使用一个缓存号来区分由同一个模板生成的不同页面和缓存。代码示例:
$ cache _ id=$ _ GET[' id '];//url中的id参数值为$ smarty-display ('index。TPL ',$ cache _ id);//添加缓存号,完成相同模板不同参数不同缓存的功能;在这里,有人发现,如果我的页面有多个参数,你一定要解析出来作为缓存号吗?这里有个更好的方法推荐给大家,网上大多数人都认同。(其实上面那段是‘废话’,可以去掉,但过渡写的是为了循序渐进和更好理解,见谅)
推荐的方法是:可以直接获取整个当前URL,并将其添加为cache_id,这样无论它有多少参数,都不会存储在同一个缓存页面中。
代码示例:
$ URL=$ _ SERVER[' REQUEST _ URI '];//获取当前页面的url,有的用md5或$ smarty-display ('index)加密URL。TPL ',$ URL);2.部分缓存方法
定义:表示网站系统的部分页面被缓存,部分页面没有被缓存。例如,网站的注册和登录处理页面可能不会被缓存。
一种处理方法:在display()方法之前或之后,清除模板缓存一次,注意保持两种方法的参数一致;
代码示例:
$ smarty-clear _ cache(' index . TPL ');//这个句子可以是显示方法句子前后的$ smarty-display(' index . TPL ');//必须与clear_cache方法参数一致。另一种处理方法:原理是一样的,因为部分缓存相当于两种情况,可以写另一种显示方法进行重构,其中一种决定是否缓存,如果不缓存,就用clear_cache()方法处理,否则缓存;
代码示例:
函数显示($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);}}调用方法:
self : display($ temp _ name,$cache_id,false);//这个设置意味着不缓存,有问题可以留言。3.本地缓存方法
定义:一个页面在某些地方不是缓存的,而是每次动态更新加载的,比如文章详情页和登录窗口框架的浏览次数。
实现本地缓存有几种方式(反过来说,如果缓存处理不好,可以实现本地缓存)。我会专注于一两个方法,我觉得能行,不需要学那么多。
A.使用SMarty引擎内置的nocache功能实现uncache功能(SMarty 3 . 1 . 8版本支持,不知smarty2是否支持)
只需将{nocache}未缓存的内容{/nocache}添加到tpl或html模板页面的未缓存区域。代码示例:
处理页面:$smarty-assign('time ',time());
模板页面:{nocache}{$time}{/nocache}
b、注册块方法实现无缓存
写一个no_cached方法,调用smarty注册块函数注册该方法,可以实现,直接粘贴实例。
代码示例:
处理页面:$smarty-assign('time ',time());
函数no _ cached ($param,$content){//参数$param是块参数数组,参数$ content是未缓存的内容return $ content} $ smarty-register _ block(' no_cached ',' no _ cached ',false);//寄存器块方法:register _ block ($ TPL _ func,$ reg _ func,$ cache able);//参数1是模板函数;参数2是要注册的函数,也就是上面写的函数;参数3是是否缓存,必须设置为false模板页面:{no_cached}{$time}{/no_cached}
c、当然还有其他方法,比如注册函数,这里就不介绍了。注册块被详细使用。请参考smarty的说明,这里不再详细描述。
4.在缓存机制中使用is _ cached
最后,我们将讨论is _ cached ($temp_tpl [,$cache_id])判断是否已经缓存的方法。$ temp _ TPL的参数是模板页,$ cache _ ID的参数是缓存号。该方法主要用于加载模板前判断缓存。如果它不存在,它将加载数据。如果确实存在,会直接跳过,从而达到缓存的最终目的。
示例:
if(!smarty-is _ cache(' index。TPL '){//没有缓存//调用数据库并为变量赋值} $ smarty-display(' index . TPL ');//在模板页面上方加载Smarty的三个缓存
附件:Smarty缓存清除方法
1.通用缓存清除方法
通过以下方法清除Smarty的缓存:
代码示例:
$ smarty-clear _ cache(' index . TPL ');//清除模板的缓存;$smarty-clear_cache('index.tpl ',$ cache _ Id);//用缓存号清除缓存;如:页面http://www.abc.com/index.asp? Act=登录,可以设置$cache_id进行登录;$ smarty-clear _ all _ cache();//清除所有缓存,即缓存目录中的所有缓存文件;有一个问题。比如网站上有一个栏目:http://blog.unvs.cn/archives/php/.我只是想清空这个栏目的页面缓存,不想清空全部或者一个页面缓存。这种情况经常发生。然后,我将谈谈Smarty引擎中强大的缓存收集方法。
二、清除缓存集的方法
Smarty中文教程描述如下:可以通过建立cache_id集合进行更详细的聚合,用竖线“|”分隔cache_id集合中的子集。您可以包含尽可能多的子集。
上面的解释有点模糊。简单来说,在建立缓存的过程中,cache_id是和set ID一起保存的,set ID和缓存号之间用一条竖线隔开,而不仅仅是一个单独的缓存号,比如:
$smarty-display('index.tpl ',' category| ')。$ cache _ id);//前面增加一个类别|的前缀,表示类别集中会保存缓存号$cache_id,可以理解为分组;这里添加一个关于如何命名缓存文件的知识点,以及缓存文件命名生成规则:set name _ site directory _ page name _ parameter _ page name code MD5加密
如下图所示:
(类别属于集合,索引属于集合)
集合刚刚生成。清除集合下缓存的关键如下:
$smarty-clear_cache(null,‘category’);//注意,模板文件参数为空,不允许使用' '。以上完成了集合缓存的生成和清除。其实网上也有一种方法:给一个栏目新建一个目录,比如新闻栏目,把缓存生成放在新闻的缓存文件夹里,并不难。然后,当您需要清除此列的缓存时,缓存路径可以指向新闻。这种方法是可行的。个人认为不灵活。
好了,Smarty缓存机制的原理讲解完毕。当然,这些只是实际开发中常见的应用技巧,与缓存相关的功能和块更多。不过掌握了这些之后,相信Smarty缓存是可以自由使用的。
更多对Smarty相关内容感兴趣的读者可以查看本网站专题:《smarty模板入门基础教程》、《PHP模板技术总结》、《PHP基于pdo操作数据库技巧总结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》、《php常见数据库操作技巧汇总》。
希望本文对基于smarty模板的PHP编程有所帮助。
版权声明:Smarty缓存机制示例详细说明[三种缓存方法]是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。