网站首页footer中的菜单标题是从数据库读取并显示处理的。

也就是 <footer>标题里面是foreach。这样每个人打开网站就查询遍历效率会很低。

<footer class="footer">
<div class="container">
<div class="row">
<div class="col-lg-10">
<div class="row">
<?php
$html = '';
$i = 0;
$res = ArticleCategory::getHelpArticles();
if (!empty($res)) {
foreach ($res as $cate) {
$i++;
$html .= '<div class="col-lg-2"><dl class="col-links col-links-first">';
$html .= Html::tag('dt', $cate->attributes['name']);
if (!empty($cate->articles)) {
foreach ($cate->articles as $article) {
$html .= '<dd>';
$html .= Html::a($article->title, Url::to('/page/' . $article->friendlyUrl));
$html .= '</dd>';
}
$html .= '</dl>';
}
$html .= '</dl></div>';
}
}
echo $html;
?>
</div>
</div>
</footer>

如果要把footer之间的内容缓存起来。每60分钟刷新一次。这样就会减少很多不必要的查询。

Yii2.0 在缓存方面做的不错,做法非常简单。

开始行动:

footer上方加入

$footerCacheKey = 'footerCache';
if ($this->beginCache($footerCacheKey)) {
?> <footer class="footer">

footer下方

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

footer属于首页,是由SiteController调用。

在 behaviors() 方法里面加入

    public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['logout', 'signup'],
'rules' => [
[
'actions' => ['signup'],
'allow' => true,
'roles' => ['?'],
],
[
'actions' => ['logout'],
'allow' => true,
'roles' => ['@'],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
// 新加入的代码
'pageCache' => [
'class' => 'yii\filters\PageCache',
'only' => ['index'],
'duration' => 60*60*24,
],
];
}

参考:

http://www.yiiframework.com/doc-2.0/guide-caching-page.html

http://www.yiiframework.com/doc-2.0/guide-caching-fragment.html

Yii 2.0 使用片段缓存的更多相关文章

  1. YII 1.0 缓存使用

    在main.php的组件components中配置设置添加缓存 'cache'=>array( 'class' => 'system.caching.CFileCache' ), 也就是f ...

  2. yii2.0缓存篇之片段缓存

    片段缓存指的是缓存页面内容中的某个片段.默认缓存 60秒. return $this->renderPartial("ca");                        ...

  3. yii的简单片段缓存

    $dependency = [    'class' => 'yii\caching\DbDependency',    'sql' => 'SELECT MAX(u_id) FROM u ...

  4. yii2.0使用之缓存

    1.片段缓存(针对于视图中的某部分进行缓存): <?php 设置有效时间 $time=15; 缓存依赖,存入文件.当文件内容发生改变是才会刷新新内容 $dependecy=[ 'class'=& ...

  5. ESI+varnish页面片段缓存

    对于片段缓存,业界有成熟的解决方案,还有一个所谓的W3C标准:ESI(Edge Side Include) . ESI本身没有什么,只是一个XML的标签集合.ESI和SSI(Server Side I ...

  6. [Yii2.0] 以Yii 2.0风格加载自定义类或命名空间 [配置使用Yii2 autoloader]

    Yii 2.0最显著的特征之一就是引入了命名空间,因此对于自定义类的引入方式也同之前有所不同.这篇文章讨论一下如何利用Yii 2.0的自动加载机制,向系统中引入自定义类和命名空间.本文旨在抛砖引玉,如 ...

  7. 使用nginx部署Yii 2.0\yii-basic-app-2.0.5

    nginx.conf #user nobody;worker_processes 1; #error_log logs/error.log;#error_log logs/error.log noti ...

  8. iOS开发--基于AFNetWorking3.0的图片缓存分析

    图片在APP中占有重要的角色,对图片做好缓存是重要的一项工作.[TOC] 理论 不喜欢理论的可以直接跳到下面的Demo实践部分 缓存介绍 缓存按照保存位置可以分为两类:内存缓存.硬盘缓存(FMDB.C ...

  9. 在YII中使用Redis等缓存

    Yii AR 单行数据-自动缓存机制 | LOCKPHP Yii AR 单行数据-自动LOG机制 CActiveRecordBehavior进阶 | LOCKPHP 缓存 - 权威指南 - Yii F ...

随机推荐

  1. gluoncv voc_detection

    https://github.com/zhreshold/gluon-cv/commit/73b3986aaa2e0d0e6f3f428c12072e3a9d29905e gluoncv可能版本还没更 ...

  2. 【[USACO12MAR]园林绿化Landscaping】

    我旁边有一个暴力的金牌爷整天欺负我嘤嘤嘤 关我电脑,关我浏览器,还钦定我学不会贪心 没错我就是学不会了 这道题还是非常妙的 我们发现这个土的数量实在是少的可怜,于是我们甚至可以对每一个单位的土都进行贪 ...

  3. Hadoop学习之路(二十二)MapReduce的输入和输出

    MapReduce的输入 作为一个会编写MR程序的人来说,知道map方法的参数是默认的数据读取组件读取到的一行数据 1.是谁在读取? 是谁在调用这个map方法? 查看源码Mapper.java知道是r ...

  4. SpringBoot实战(十三)之缓存

    什么是缓存? 引用下百度百科的解释: 缓存就是数据交换的缓冲区(又称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,找到了则直接执行,找不到的话则从内存中查找.由于缓存的运行速度 ...

  5. Azure Blob数据迁移工具

    数据迁移备份,更多的应用场景见https://docs.azure.cn/zh-cn/storage/common/storage-moving-data?toc=%2fstorage%2fblobs ...

  6. Tomcat中的Filter

    Filter 节选部分源码.源码版本 Tomcat8.5 说明 filter 是 Servlet 规范 filter 是在 ,执行 Servlet.service方法之前执行 Filter相关接口 p ...

  7. PAT——1060. 爱丁顿数

    英国天文学家爱丁顿很喜欢骑车.据说他为了炫耀自己的骑车功力,还定义了一个“爱丁顿数”E,即满足有E天骑车超过E英里的最大整数E.据说爱丁顿自己的E等于87. 现给定某人N天的骑车距离,请你算出对应的爱 ...

  8. lwip 2.0.3 DNS 域名解析 使用

    1.  在  lwipopts.h 中 #define LWIP_DNS 1 /* 使能 DNS 服务器的功能 ,2018年1月8日21:16:20,suozhang */ #define LWIP_ ...

  9. Spring Boot Admin 2.1.0 全攻略

    转载请标明出处: https://www.fangzhipeng.com 本文出自方志朋的博客 Spring Boot Admin简介 Spring Boot Admin是一个开源社区项目,用于管理和 ...

  10. #leetcode刷题之路32-最长有效括号

    给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示 ...