Smarty3【五】页面缓存

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Tacks/article/details/85100249

页面缓存是什么意思?它是把页面内容保存在磁盘上,在下次访问相同的页面的时候,直接返回保存的内容,减轻了数据库的压力。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

猜你喜欢

转载自blog.csdn.net/Tacks/article/details/85100249
今日推荐