片段缓存
首先在controller中直接执行
return $this->renderPartial('index');
然后在相应的view中的index文件中:
1 <?php if($this->beginCache('cache_div')){?> 2 <div id="cache_div"> 3 <div>这里待会会被缓存</div> 4 </div> 5 <?php 6 $this->endCache();} 7 ?> 8 <div id="no_cache_div"> 9 <div>这里不会被缓存</div> 10 </div>
这样,在beginCache和endCache之间的代码会被缓存,而id为 no_cache_div 中的内容则不会被缓存
我们在index中的代码进行修改为:
1 <?php if($this->beginCache('cache_div')){?> 2 <div id="cache_div"> 3 <div>这里待会会被缓存fefefef</div> 4 </div> 5 <?php 6 $this->endCache();} 7 ?> 8 <div id="no_cache_div"> 9 <div>这里不会被缓存fefefef</div> 10 </div>
然后继续刷新页面,发现id为cache_div中的内容不会加上fefefef而id为 no_cache_div 中的内容则会加上fefefef
关于片段缓存的设置
1、设置缓存失效的时间
在view里面的index文件里,beginCache的第二个参数设置duration,然后给duration设置时间
<?php $duration=15; ?> <?php if($this->beginCache('cache_div',['duration'=>$duration])){?> <div id="cache_div"> <div>这里待会会被缓存</div> </div> <?php $this->endCache();} ?>
2、设置缓存的依赖文件
beginCache的第二个参数设置为dependency
<?php $dependency = [ 'class'=>'yii\caching\FileDependency', 'fileName'=>'hw.txt' ]; ?> <?php if($this->beginCache('cache_div',['dependency'=>$dependency])){?> <div id="cache_div"> <div>这里待会会被缓存</div> </div> <?php $this->endCache();} ?>
其中hw.txt存放在web目录下,当改变该目录中的内容,则该缓存失效
3、是否开启缓存
1 <?php 2 $enabled=true; 3 ?> 4 5 <?php if($this->beginCache('cache_div',['enabled'=>$enabled])){?> 6 <div id="cache_div"> 7 <div>这里待会会被缓存defrfr</div> 8 </div> 9 <?php 10 $this->endCache();} 11 ?>
片段缓存嵌套:
1 <?php if($this->beginCache('cache_div',['duration'=>20])) { ?> 2 3 <div id='cache_outer_div'> 4 <div>这里是外层,待会会被缓存</div> 5 6 <?php if ($this->beginCache('cache_inner_div', ['duration'=> 1])) { ?> 7 <div id='cache_inner_div'> 8 这里是内层,待会会被缓存 9 </div> 10 <?php 11 $this->endCache(); 12 } 13 ?> 14 </div> 15 <?php 16 $this->endCache(); 17 } 18 ?>
从中可以看出外层的缓存是20s后失效,但是里面的缓存是1s失效,所以在有内外缓存嵌套的时候注意失效时间