YII2框架学习 高效篇(三) 片段缓存与页面缓存

实际网站建设中,对于不经常改变的部分(比如商品目录)可以使用片段缓存的技术进行缓存。

先来一个小例子,通过beginCache()和endCache()方法实现

<?php
if( $this->beginCache('cache_div')) {
    ?>
    <div id='cache_div'>
        <div>缓存adad</div>
    </div>
    <?php
    $this->endCache();
}
?>
<div id='no_cache_div'>
    <div>不缓存adad</div>
</div>

不论如何修改缓存区的文字,都不会变化,因为浏览器取的是之前缓存的。

下面看看缓存时间设置,beginCache()的第二个参数是一个数组,数组里面的duration的value为时间,超过时间,缓存会刷新。看例子

<?php
//缓存时间设置
if( $this->beginCache('cache_div',['duration'=>15])) {
    ?>
    <div id='cache_div'>
        <div>缓存add</div>
    </div>
    <?php
    $this->endCache();
}
?>

和前面的数据缓存依赖类似,片段缓存也可以设置依赖,这里用一个文件依赖做例子

<?php
//缓存文件依赖设置
$dependency = [
    'class' => 'yii\caching\FileDependency',
    'fileName' => 'hw.txt'
];
if( $this->beginCache('cache_div',['dependency' => $dependency])) {
    ?>
    <div id='cache_div'>
        <div>缓存adda</div>
    </div>
    <?php
    $this->endCache();
}
?>
当hw.txt被修改之后,缓存才会刷新


还可以设置缓存开关,beginCache()的第二个参数是一个数组,数组里面的enable的value为开关,看例子

<?php
//缓存开关设置

if( $this->beginCache('cache_div',['enabled' => false])) {
    ?>
    <div id='cache_div'>
        <div>缓存ada</div>
    </div>
    <?php
    $this->endCache();
}
?>

那么,问题来了。如果是缓存嵌套怎么办?比如

<?php if( $this->beginCache('cache_div',['enabled' => false])) {
    ?>
    <div id='cache_div'>
        <div>缓存33ada</div>
    </div>

    <?php if( $this->beginCache('cache_inner_div',['enabled' => true])) {
        ?>
        <div id='cache_inner_div'>
            <div>内层缓存331321da</div>
        </div>
        <?php
        $this->endCache();
    }
    ?>

    <?php
    $this->endCache();
}
?>

注意:这种时候,如果外层被缓存了,里层是没有被解析的机会的,只能被缓存。但是外层没有被缓存的话,里层的缓存设置是生效了。记住了!!!!


之前学习了片段缓存,应对片段不经常刷新的情况。但是有的时候连页面都不用刷新,那么就要用到页面缓存技术了。

在控制器需要缓存的页面方法前,加入名为behaviors的方法,如下:

    public function behaviors(){
        return [
            [
                'class' => 'yii\filters\PageCache',
                'duration' => 1000,//时间设置
                'only' =>['about'],//规定缓存哪一个,默认为全部
                'dependency' => [
                    'class' => 'yii\caching\FileDepengency',
                    'filename' => 'hw.txt'
                ]//文件依赖
            ]
        ];
    }

    public function actionAbout(){
        return $this->renderPartial('about');
    }



评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值