Smarty缓存
所谓缓存,就是将经常会用到的数据,保存到硬件或软件中。但归根结底都是保存在内存中。
下次再访问的时候,可以直接从缓存中读取数据,从而提高访问效率。
比如浏览器缓存、CPU的L2等。
站在数据库(比如mysql)的角度,对于一些经常要用到不变化的数据,可以将其缓存起来,那么后续的访问,就可以直接访问该缓存内容,无需连接数据库,查询表。从而极大的提高了访问效率。比如memcached。
站在php的角度,有时候也称之为页面缓存,将不经常变化的页面(且访问量比较大),可以将其保存为静态页面,下次访问的时候,直接访问该静态页面,无需通过php了。从而提高访问速度,如各大新闻网站,博客网站。比如页面静态化技术。
请问:Smarty是哪一种?---文件缓存。
默认情况下是,smarty是没有开启缓存。
ü 缓存有效期,cache_lifetime,单位是s,默认值3600,一个小时
require './libs/Smarty.class.php';
//$smarty->force_compile = true;//强行编译
$smarty->debugging = true;//调试模式开启
$smarty->caching = true;//cache缓存
$smarty->cache_lifetime = 120;//cache的周期
$smarty->template_dir="./templates";//设置模板目录
$smarty->compile_dir="./templates_c";//设置相关的编译后的目录
$smarty->assign('title',"这个是标题");
$smarty->assign('content',"这个是内容");
//5.指定输出的模板文件./templates/index.html
$smarty->display('index.html');
其中,需要在目录之下,新建一个cache目录,如下;
需要有一个机制,来判断缓存是否有效。如果有效,则无需使用模型获取数据。
Smarty提供了一个isCached()方法用于判断缓存的页面是否有效。
页面一旦缓存,所有的内容都是静态的,但实际上,有些内容是不能使用静态的,比如用户状态,时间显示等。
标签的缓存控制,即在标签中使用 nocache 属性,适用于单个标签
变量的缓存控制,即在分配变量时设置第三个参数为 true,适用于单个变量
模板区域缓存控制,即在模板页面中使用{nocache} {/nocache},适用于一块
直接在模板页面中对某个变量,加上nocache属性即可
在php程序,使用assign函数的第三个参数,设置true即可。
在模板页面中,使用nocache内置函数,可以控制器一块区域不缓存
缓存文件本身是php文件,因为它要处理局部不缓存的情况。
而且,对于一个缓存文件的有效期的判断,是通过在改文件中保存一些信息来实现的,所以必须以php的方式来保存缓存文件,这也就是缓存的名字为什么是php的原因的了
☞注意细节
局部不缓存的本质,还是动态的访问程序,可以查看缓存页面来验证。
变量不缓存的设置,会在编译后的代码中起效。所以如果你重新设置了某个变量不缓存,那么你需要删除已经存在的编译和缓存文件,使得模板可以重新编译并起效。
[需求]:对商品详情页面进行缓存
编写indexAction如下:
还是这个内容,why?
但实际上不同的商品,内容是不同的。应该缓存为不同的内容才可以。
使用,在display的时候,增加一个参数,唯一标识这个商品。
然后在判断的时候,isCahced中也可以增加一个参数,指定是哪个商品的缓存是否有效。
如果要缓存,缓存的页面数大概为:10 * 10 * 5 * 7 = 3500
还有分页,均值为4, 4 * 3500 = 14000
空间换时间。
index.php?p=home&c=list&a=index&size=m&brand=puma&style=long&material=cutton
其实,缓存组的本质仍然是单模板多缓存。
删除文件底层是使用unlink()函数。
🐳 作者:hiszm 📢 版权:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,万分感谢。 💬 留言:同时 , 如果文中有什么错误,欢迎指出。以免更多的人被误导。 |