页面缓存
页面缓存指的是在做事器端缓存全体页面的内容。随后当同一个页面被要求时,内容将从缓存中取出,而不是重新天生。
页面缓存由 yii\filters\PageCache 类供应支持,该类是一个过滤器。它可以像这样在掌握器类中利用:

public function behaviors(){ return [ [ 'class' => 'yii\filters\PageCache', 'only' => ['index'], 'duration' => 60, 'variations' => [ \Yii::$app->language, ], 'dependency' => [ 'class' => 'yii\caching\DbDependency', 'sql' => 'SELECT COUNT() FROM post', ], ], ];}
上述代码表示页面缓存只在 index 操作时启用,页面内容最多被缓存 60 秒,会随着当前运用的措辞变动而变革。如果文章总数发生变革则缓存的页面会失落效。
如你所见,页面缓存和片段缓存极其相似。它们都支持 duration,dependencies,variations 和 enabled 配置选项。它们的紧张差异是页面缓存是由过滤器实现,而片段缓存则是一个小部件。
到了这里可能很多人会以为这些有些难懂, 没紧要,我为大家准备了一套佳构PHP教程,里面涵盖Nginx,YII2,laravel等学习教程,如果你已经会了,想要精通进阶中高等PHP,我这里也有专注于PHP中高等进阶的教程,点击下方标题链接即可获取方法!
全套laravel框架、ThinkPHP框架全套教程分享,PHP程序员福利!
PHP开拓三年只懂增编削查?那是你没有方案好php学习路线
你可以在利用页面缓存的同时,利用片段缓存和动态内容。
HTTP 缓存
除了做事器端缓存外, Web 运用还可以利用客户端缓存去节省相同页面内容的天生和传输韶光。
通过配置 yii\filters\HttpCache 过滤器,掌握器操作渲染的内容就能缓存在客户端。yii\filters\HttpCache 过滤器仅对 GET 和 HEAD 要求生效,它能为这些要求设置三种与缓存有关的 HTTP 头。
yii\filters\HttpCache::lastModified
yii\filters\HttpCache::etagSeed
yii\filters\HttpCache::cacheControlHeader
Last-Modified 头
Last-Modified 头利用韶光戳标明页面自上次客户端缓存后是否被修正过。
通过配置 yii\filters\HttpCache::lastModified 属性向客户端发送 Last-Modified 头。该属性的值该当为 PHP callable 类型,返回的是页面修正时的 Unix 韶光戳。该 callable 的参数和返回值该当如下:
/ @param Action $action 当前处理的操为难刁难象 @param array $params “params” 属性的值 @return integer 页面修正时的 Unix 韶光戳 /function ($action, $params)
以下是利用 Last-Modified 头的示例:
public function behaviors(){ return [ [ 'class' => 'yii\filters\HttpCache', 'only' => ['index'], 'lastModified' => function ($action, $params) { $q = new \yii\db\Query(); return $q->from('post')->max('UPDATEd_at'); }, ], ];}
上述代码表明 HTTP 缓存只在 index 操作时启用。它会基于页面末了修正韶光天生一个 Last-Modified HTTP 头。当浏览器第一次访问 index 页时,做事器将会天生页面并发送至客户端浏览器。之后客户端浏览器在页面没被修正期间访问该页,做事器将不会重新天生页面,浏览器会利用之前客户端缓存下来的内容。因此做事端渲染和内容传输都将省去。
ETag 头
“Entity Tag”(实体标签,简称 ETag)利用一个哈希值表示页面内容。如果页面被修正过,哈希值也会随之改变。通过比拟客户真个哈希值和做事器端天生的哈希值,浏览器就能判断页面是否被修正过,进而决定是否该当重新传输内容。
通过配置 yii\filters\HttpCache::etagSeed 属性向客户端发送 ETag 头。该属性的值该当为 PHP callable 类型,返回的是一段种子字符用来天生 ETag 哈希值。该 callable 的参数和返回值该当如下:
/ @param Action $action 当前处理的操为难刁难象 @param array $params “params” 属性的值 @return string 一段种子字符用来天生 ETag 哈希值 /function ($action, $params)
以下是利用 ETag 头的示例:
public function behaviors(){ return [ [ 'class' => 'yii\filters\HttpCache', 'only' => ['view'], 'etagSeed' => function ($action, $params) { $post = $this->findModel(\Yii::$app->request->get('id')); return serialize([$post->title, $post->content]); }, ], ];}上述代码表明 HTTP 缓存只在 view 操作时启用。它会基于用户要求的标题和内容天生一个 ETag HTTP 头。当浏览器第一次访问 view 页时,做事器将会天生页面并发送至客户端浏览器。之后客户端浏览器标题和内容没被修正在期间访问该页,做事器将不会重新天生页面,浏览器会利用之前客户端缓存下来的内容。因此做事端渲染和内容传输都将省去。
ETag 比较 Last-Modified 能实现更繁芜和更精确的缓存策略。例如,当站点切换到另一个主题时可以使 ETag 失落效。
繁芜的 Etag 天生种子可能会违背利用 HttpCache 的初衷而引起不必要的性能开销,由于相应每一次要求都须要重新打算 Etag。请试着找出一个最大略的表达式去触发 Etag 失落效。
把稳:为了遵照 RFC 7232(HTTP 1.1 协议),如果同时配置了 ETag 和 Last-Modified 头,HttpCache 将会同时发送它们。并且如果客户端同时发送 If-None-Match 头和 If-Modified-Since 头,则只有前者会被接管。
Cache-Control 头
Cache-Control 头指定了页面的常规缓存策略。可以通过配置 yii\filters\HttpCache::cacheControlHeader 属性发送相应的头信息。默认发送以下头:
Cache-Control: public, max-age=3600
会话缓存限定器
当页面使 session 时,PHP 将会按照 PHP.INI 中所设置的 session.cache_limiter 值自动发送一些缓存干系的 HTTP 头。这些 HTTP 头有可能会滋扰你原来设置的 HttpCache 或让其失落效。为了避免此问题,默认情形下 HttpCache 禁止自动发送这些头。想改变这一行为,可以配置 yii\filters\HttpCache::sessionCacheLimiter 属性。该属性接管一个字符串值,包括 public,private,private_no_expire,和 nocache。请参考 PHP 手册中的缓存限定器理解这些值的含义。
SEO 影响
搜索引擎趋向于遵照站点的缓存头。由于一些爬虫的抓取频率有限定,启用缓存头可以可以减少重复要求数量,增加爬虫抓取效率(译者:大意如此,但搜索引擎的排名规则不理解,好的缓存策略该当是可以为用户体验加分的)。