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" => "yiicachingFileDependency",
"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" => "yiifiltersPageCache",
"duration" => 1000,//时间设置
"only" =>["about"],//规定缓存哪一个,默认为全部
"dependency" => [
"class" => "yiicachingFileDepengency",
"filename" => "hw.txt"
]//文件依赖
]
];
}
public function actionAbout(){
return $this->renderPartial("about");
}声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
