页面缓存
页面缓存指的是在服务器端缓存整个页面的内容。随后当同一个页面被请求时,内容将从缓存中取出,而不是重新生成。
页面缓存由 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 配置选项。它们的主要区别是页面缓存是由过滤器实现,而片段缓存则是一个小部件。
你可以在使用页面缓存的同时,使用片段缓存和动态内容。
HTTP 缓存
除了服务器端缓存外, Web 应用还可以利用客户端缓存去节省相同页面内容的生成和传输时间。
通过配置 yii/filters/HttpCache 过滤器,控制器操作渲染的内容就能缓存在客户端。yii/filters/HttpCache 过滤器仅对 GET 和 HEAD 请求生效,它能为这些请求设置三种与缓存有关的 HTTP 头。
yii/filters/HttpCache::lastModified yii/filters/HttpCache::etagSeed yii/filters/HttpCache::cacheControlHeaderLast-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 页时,服务器将会生成页面并发送至客户端浏览器。之后客户端浏览器在页面没被修改期间访问该页,服务器将不会重新生成页面,浏览器会使用之前客户端缓存下来的内容。因此服务端渲染和内容传输都将省去。
新闻热点
疑难解答