页面缓存是什么意思?它是把页面内容保存在磁盘上,在下次访问相同的页面的时候,直接返回保存的内容,减轻了数据库的压力。Smarty3通过将输出内容保存到文件内,缓存机制可以用来加速 display()的执行。 如果缓存被开启,那么显示时缓存的输出将替代重新生成显示内容的操作。 缓存可以极大提高程序的执行速度,尤其当模板需要很长的计算时间的情况下,因为可能要走数据库又要进行一系列的处理,如果缓存页面后,就可以直接走缓存的文件。
一 简单使用缓存
[1]开启缓存
[2]配置缓存的目录以及缓存的生命周期
[3]判断该页面是否缓存,或者是要走数据库取出数据
[4]显示页面
//这里是引入上一次的简单继承的Smarty主类
include './MySmarty.class.php';
//实例化 smarty类
$smarty = new MySmarty();
//开启缓存
$smarty->caching = true;
//设置缓存周期
$smarty->cache_lifetime=10;
//配置缓存的目录
$smarty->cache_dir = './cache';
//判断是否缓存
if(!$smarty->isCached('1.html')){
echo '走数据库,哈哈哈哈哈';
$user = array('name'=>'王小虫','age'=>'20');
$smarty->assign('user',$user);
}
//显示页面
$smarty->display('1.html');
二 局部缓存页面
局部缓存的意思就是,页面中有一部分我不去缓存它,需要它动态变化。就比如说购物网站里面的商品页面,可能商品的价格会动态变化,但是其他基本上都不变,那么我们只需要就获取它的价格,而页面其他部分的我们就用缓存。其实局部缓存的一个大致意思就是,整个页面要缓存,那么你控制一下那些不去缓存就好了。
这里有四种常用的局部缓存方法
[1]使用nocache针对某个值进行设置不缓存
[2]使用{nocache}{/nocache}实现大区块的不缓存
[3]在php的页面里利用assign赋值的时候加上第三个参数true
[4]在php页面写一个函数,然后利用{insert name="function" }进行插入
//引入上一次的简单继承的Smarty的主类
include './MySmarty.class.php';
//实例化 smarty类
$smarty = new MySmarty();
//开启缓存
$smarty->caching = true;
//设置缓存周期
$smarty->cache_lifetime=10;
//配置缓存的目录
$smarty->cache_dir = './cache';
//判断是否缓存,并且从数据库取出数据
if(!$smarty->isCached('2.html')){
echo '走数据库,哈哈哈哈哈';
$user = array('name'=>'王小虫','age'=>'20');
$smarty->assign('user',$user);
}
//四种 局部缓存的方法
$smarty->assign('time',time()); //【1】时间不缓存 在页面里面 使用加nocache设置
$smarty->assign('num',rand(10,99)); //【2】随机数 在页面里面 利用{nocache}{/nocache}
$smarty->assign('ccc',mt_rand(),true);//【3】在赋值的时候就加上第三个参数 true 设置不缓存
//【4】在页面里面写一个函数 ,然后再html插入 {insert name="函数名" $param}
function insert_ddd($param){
return '随机编号user:'. "----".$param['user']."------" .md5(uniqid());
}
$smarty->display('2.html');
<!DOCTYPE html>
<html lang="en">
<head>
<title>2_局部缓存</title>
<meta charset="utf-8">
</head>
<body>
<pre>
时间: {$time|date_format:"%y-%m-%d %H:%M:%S" nocache}
随机数:{nocache}{$num}{/nocache}
{$ccc}
插入函数:{insert name="ddd" user="Tacks"}
<hr/>
{$user.name}
{$user.age}
</pre>
</body>
</html>
三 单页面多缓存
单页面多缓存,意思就是同样的一个模板,但是想根据get的值或影响因素不一样,然后去生成不同的页面缓存。举个例子,商品页的id就是不一样的,所以这里使用单页面多缓存,去实现传的id不同而有对应的商品页。
但是一定要确保id的值要唯一,即不同的商品对应不同的id,这样根据id缓存下来的页面才有不一样的效果
include './MySmarty.class.php';
//实例化 smarty类
$smarty = new MySmarty();
//开启缓存
$smarty->caching = true;
//设置缓存周期
$smarty->cache_lifetime=10;
//配置缓存的目录
$smarty->cache_dir = './cache';
//接受传过来的id
$id = $_GET['id'] + 0;
//判断是否缓存,并且从数据库取出数据
if(!$smarty->isCached('3.html',$id)){
echo '走数据库,哈哈哈哈哈';
$user = array('name'=>'王小虫','age'=>'20');
$smarty->assign('user',$user);
}
$smarty->display('3.html',$id);//id要确保唯一
<!DOCTYPE html>
<html lang="en">
<head>
<title>3_单页面多缓存</title>
<meta charset="utf-8">
</head>
<body>
<pre>
姓名:{$user['name']}
年龄:{$user['age']}
编号id:{$smarty.get.id}
</pre>
</body>
</html>
四 清除缓存
缓存文件也是php,它也不会自己删除,一旦缓存过多的时候,一个文件夹下面过多的小文件会影响网站的性能,那么就需要按时手动清除一下,那么如何清除。主要就是利用clearCache()方法 和clearAllCache()方法
利用$smarty->clearCache('1.html') 两个参数 模板名 和 缓存id
[1]如果只指定模板名,不指定缓存id,则改模板对应的所有缓存都会被删除
[2]也可以删除缓存的时候,传缓存id,删除指定的缓存文件
也可以利用 $smarty->clearAllCache(),清除所有的缓存。
有时候我们为了测试页面,而不需要使用缓存,但是又不想修改代码,那么我们可以暂时关闭缓存
$smarty->force_cache = true
小结
[1]学会把缓存的配置项页加入到继承smarty类的里面
[2]学会合理使用生成缓存页面,单页面多缓存很重要,以及局部缓存
[3]理解缓存传过去的id,最好确保id的唯一性,比如那些因素会影响页面的内容,就把那些参数结合在一起生成一个唯一id