Smarty缓存
来源:互联网 发布:手机lol视频软件 编辑:程序博客网 时间:2024/06/16 05:18
Smarty缓存
非常有用,非常重要。
什么是缓存?
所谓缓存,就是将经常会用到的数据,保存到硬件或软件中。但归根结底都是保存在内存中。
下次再访问的时候,可以直接从缓存中读取数据,从而提高访问效率。
比如浏览器缓存、CPU的L2等。
缓存方式:
ü 数据缓存
ü 文件缓存
数据缓存
站在数据库(比如mysql)的角度,对于一些经常要用到不变化的数据,可以将其缓存起来,那么后续的访问,就可以直接访问该缓存内容,无需连接数据库,查询表。从而极大的提高了访问效率。比如memcached。
文件缓存
站在php的角度,有时候也称之为页面缓存,将不经常变化的页面(且访问量比较大),可以将其保存为静态页面,下次访问的时候,直接访问该静态页面,无需通过php了。从而提高访问速度,如各大新闻网站,博客网站。比如页面静态化技术。
请问:Smarty是哪一种?---文件缓存。
1.使用缓存
在项目中,使用缓存。
默认情况下是,smarty是没有开启缓存。
需要设置,开启缓存,有如下几个配置项:
ü 开启缓存,caching
ü 缓存目录,cache_dir
ü 缓存有效期,cache_lifetime,单位是s,默认值3600,一个小时
在基础控制器,开启缓存,如下:
<?php
//1.引入smart的类
require './libs/Smarty.class.php';
//2.实例化smarty的对象
$smarty = new Smarty;
//3.设置相关属性
//$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->caching=true;
//设置缓存目录
$smarty->cache_dir='cache';
//设置有效期
$smarty->cache_lifetime=60;
//开启smarty调试模式
$smarty->debugging=true;
//4.分配数据
$smarty->assign('title',"这个是标题");
$smarty->assign('content',"这个是内容");
//5.指定输出的模板文件./templates/index.html
$smarty->display('index.html');
其中,需要在目录之下,新建一个cache目录,如下;
此处,用到了调试模板,如下:
访问首页,
查看缓存文件,如下:
有缓存的,但是没有利用缓存。
需要有一个机制,来判断缓存是否有效。如果有效,则无需使用模型获取数据。
Smarty提供了一个isCached()方法用于判断缓存的页面是否有效。
对比7:1 (由于数据量过小 不是很明显 )
但是还是极大的提升了访问效率。
2.局部不缓存
页面一旦缓存,所有的内容都是静态的,但实际上,有些内容是不能使用静态的,比如用户状态,时间显示等。
Smarty为我们提供了局部不缓存。
smarty 提供了三种方式,来实现局部不缓存
标签的缓存控制,即在标签中使用 nocache 属性,适用于单个标签
变量的缓存控制,即在分配变量时设置第三个参数为 true,适用于单个变量
模板区域缓存控制,即在模板页面中使用{nocache} {/nocache},适用于一块
第一种方式
直接在模板页面中对某个变量,加上nocache属性即可
第二种方式
在php程序,使用assign函数的第三个参数,设置true即可。
第三种方式
在模板页面中,使用nocache内置函数,可以控制器一块区域不缓存
请问:局部不缓存的本质是什么?
查看缓存文件,
缓存文件本身是php文件,因为它要处理局部不缓存的情况。
而且,对于一个缓存文件的有效期的判断,是通过在改文件中保存一些信息来实现的,所以必须以php的方式来保存缓存文件,这也就是缓存的名字为什么是php的原因的了
☞注意细节
局部不缓存的本质,还是动态的访问程序,可以查看缓存页面来验证。
变量不缓存的设置,会在编译后的代码中起效。所以如果你重新设置了某个变量不缓存,那么你需要删除已经存在的编译和缓存文件,使得模板可以重新编译并起效。
3.单模板多缓存
[需求]:对商品详情页面进行缓存
编写indexAction如下:
访问第一个页面,如下:
访问第二个,如下:
还是这个内容,why?
原因很简单,因为所有的商品都是相同的模板页面,
只要该缓存有效,每次访问的时候,都会直接使用它。
但实际上不同的商品,内容是不同的。应该缓存为不同的内容才可以。
Smarty为我们提供了单模板多缓存的机制。
使用,在display的时候,增加一个参数,唯一标识这个商品。
然后在判断的时候,isCahced中也可以增加一个参数,指定是哪个商品的缓存是否有效。
编写代码如下:
生成缓存文件如下:
4.缓存组
[需求]:对商品列表页进行缓存。
如果要缓存,缓存的页面数大概为: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
编写代码如下:
然后使用不同的组合来访问,生成的缓存文件如下:
其实,缓存组的本质仍然是单模板多缓存。
5.删除缓存
缓存什么时候会失效?
有效期过了
模板页面发生了变化
删除缓存文件
比如在大多数后台中,都会提供清除缓存的操作。
Smarty提供了两个方法,
clearCache(),删除指定页面的缓存
clearAllCache(),删除所有的缓存
$smarty->clearAllCache();
删除文件底层是使用unlink()函数。
- php+smarty ,smarty 缓存
- smarty缓存
- smarty缓存
- smarty缓存
- smarty缓存
- smarty缓存
- Smarty缓存
- smarty缓存
- smarty缓存
- smarty缓存
- smarty缓存
- smarty 缓存
- smarty缓存
- smarty 缓存
- smarty缓存,
- smarty缓存
- Smarty缓存
- Smarty缓存
- UDP和TCP(传输层)
- Java多线程(2) 线程的状态和属性
- jquery load 的使用:
- 注意细节
- BMap的使用填坑
- Smarty缓存
- 数串
- 1010. Radix (25)(java版)
- 7-8 点赞(20 分) 微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人
- 使用chrome对nodejs和pomelo断点调试
- spring技术内幕读书笔记--事务处理
- mark 比写程序更重要的事情
- 位数问题
- heatmap在vue中的问题