Smarty开启缓存和局部不缓存

什么是缓存?
将我们的数据保存到 某个硬件或者软件当中,便于我们快速的访问。归根结底都是在内存当中。
常见的缓存形式有哪些?
数据缓存,站在数据库的角度(mysql),有些数据不是经常变化的,我们就可以把它缓存起来,下次再访问的时候,就直接访问缓存,极大了提升了效率。Memcached
文件缓存,也称页面缓存,有些页面,一旦生成,就不再变化,我们可以将这些页面缓存起来,就是直接将其转成静态页面,后续的访问就直接访问静态页面,极大了提升访问的效率。
页面静态化技术。
我们的smarty也实现了缓存,实现的是 文件缓存。
1.使用缓存
默认情况下是没有开启缓存的。要使用缓存,需要开启。有如下几个设置项:
是否开启缓存,caching
设置缓存目录,cache_dir
设置缓存的有效期,cache_lifetime ,单位是秒,默认值是3600,一个小时
在我们的项目中来设置,
Smarty开启缓存和局部不缓存_第1张图片
对应的需要创建一个cache文件夹
Smarty开启缓存和局部不缓存_第2张图片
然后,为了看清这个效果,我们开启一个调试模式。
Smarty开启缓存和局部不缓存_第3张图片
开启调试模式之后,会调用debut.tpl显示调试信息
Smarty开启缓存和局部不缓存_第4张图片
注意,可能会被浏览器拦截,
Smarty开启缓存和局部不缓存_第5张图片
调试信息如下:
Smarty开启缓存和局部不缓存_第6张图片
查看缓存文件,
Smarty开启缓存和局部不缓存_第7张图片
发现,确实已经生成了。
问题:我们明明使用了缓存,还这么慢?
Smarty开启缓存和局部不缓存_第8张图片
所以,我们需要在取数据之前,做一个判断,判断当前的缓存有效,如果有效,则无需使用模型取数据。Smarty提供了一个函数,isCached(模板名称)
Smarty开启缓存和局部不缓存_第9张图片
在indexController中也需要做相应的判断,如下:
Smarty开启缓存和局部不缓存_第10张图片
再次浏览首页(浏览两次),查看使用缓存的情况,
Smarty开启缓存和局部不缓存_第11张图片
3.68921 : 0.006 ,提升了600倍,牛!

Smarty的执行流程:
Smarty开启缓存和局部不缓存_第12张图片
在理解的是,要注意两条线:
第一条线,第一次访问的过程
第二条线,后续访问的过程
什么情况下缓存会失效呢?
已经过了有效期cache_lifetime的设置值
缓存文件被删除
模板文件被修改

2.局部不缓存
一旦页面使用了缓存之后,那整个页面的内容就不会变化。
但实际上,在某些页面,需要动态的展示信息,比如时间、用户的状态。
意味着在我们的页面中, 有一小块内容是不缓存。
Smarty提供了一个局部不缓存的用法。
有三种方式:
标签的缓存控制,即在标签中使用 nocache 属性,适用于单个标签
变量的缓存控制,即在分配变量时设置第三个参数为 true,适用于单个变量
模板区域缓存控制,即在模板页面中使用{nocache} {/nocache},适用于一块
第一种方式
Smarty开启缓存和局部不缓存_第13张图片
第二种方式
Smarty开启缓存和局部不缓存_第14张图片
第三种方式
Smarty开启缓存和局部不缓存_第15张图片
注意,局部不缓存之后生成的这个缓存文件
在这里插入图片描述

你可能感兴趣的:(smarty)