首页 > 开发 > PHP > 正文

简介PHP的Yii框架中缓存的一些高级用法

2024-05-04 22:31:32
字体:
来源:转载
供稿:网友

页面缓存
页面缓存指的是在服务器端缓存整个页面的内容。随后当同一个页面被请求时,内容将从缓存中取出,而不是重新生成。

页面缓存由 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::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 页时,服务器将会生成页面并发送至客户端浏览器。之后客户端浏览器在页面没被修改期间访问该页,服务器将不会重新生成页面,浏览器会使用之前客户端缓存下来的内容。因此服务端渲染和内容传输都将省去。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表