PHP Yii框架缓存高级用法:页面缓存与HTTP缓存配置详解

Oliver
Oliver
发布时间:2026-10-13| 4人浏览过
原创

深入解析PHP Yii框架的高级缓存机制,包括服务器端的页面缓存(PageCache)与客户端的HTTP缓存(HttpCache)。文章详细说明了如何通过配置Last-Modified、ETag及Cache-Control等HTTP头来减少重复请求和服务端渲染开销,并提供了具体的过滤器配置代码以优化Web应用性能。

页面缓存配置

页面缓存旨在服务器端存储整个页面的生成结果。当相同页面再次被请求时,系统直接从缓存中提取内容,而无需重新执行控制器逻辑或视图渲染,从而显著降低服务器负载。

第1步:使用 PageCache 过滤器

目的:为特定的控制器操作启用服务器端页面缓存,并设置失效条件。

入口:控制器的 behaviors() 方法。

动作:返回一个包含 yii\filters\PageCache 类的行为数组。该过滤器支持以下关键配置项:

  • only:指定受影响的动作(如 'index')。
  • duration:缓存持续秒数(如 60 秒)。
  • variations:根据应用状态变化的变量(如语言),不同变量值对应不同缓存版本。
  • dependency:定义缓存依赖,当数据源变化时使缓存失效。
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 秒。如果用户语言变更,将获取对应的缓存版本;若数据库中文章总数变化,缓存将立即失效。注意,页面缓存基于过滤器实现,而片段缓存通常基于小部件,两者可同时使用。

HTTP 客户端缓存配置

除了服务器端缓存,Web 应用还可利用 HTTP 头让浏览器缓存资源。通过 yii\filters\HttpCache 过滤器,可为 GET 和 HEAD 请求设置缓存验证机制,避免不必要的流量传输。

第2步:配置 Last-Modified 头

目的:基于内容的最后修改时间判断缓存是否过期。

入口:yii\filters\HttpCache::lastModified 属性。

动作:提供一个 PHP Callable 函数,接收当前 Action 和参数,返回 Unix 时间戳。浏览器首次请求后,若服务器未检测到时间更新,将返回 304 Not 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');
   },
  ],
 ];
}

第3步:配置 ETag 头

目的:通过内容哈希值精确判断页面是否发生变更,比时间戳更灵活。

入口:yii\filters\HttpCache::etagSeed 属性。

动作:提供 PHP Callable 返回种子字符串(如序列化后的标题和内容)。系统自动生成哈希值作为 ETag。若种子不变,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]);
   },
  ],
 ];
}

注意:复杂的 ETag 计算会增加服务器每次请求的开销,应尽量保持种子生成的简洁性。若同时配置了 ETag 和 Last-Modified,遵循 RFC 7232 协议,优先接受 If-None-Match 头。

第4步:配置 Cache-Control 头

目的:直接指定缓存策略指令。

入口:yii\filters\HttpCache::cacheControlHeader 属性。

动作:自定义缓存控制标头。默认值为 Cache-Control: public, max-age=3600,表示公共资源可缓存 1 小时。也可配置为 private、no-cache 等以满足不同安全需求。

会话缓存冲突处理与 SEO 影响

会话缓存限制器
启用 Session 时,PHP 默认会根据 php.ini 中的 session.cache_limiter 发送破坏性的 HTTP 头(如 Pragma: no-cache)。这会导致 HttpCache 失效。为解决此问题,可在 HttpCache 中配置 sessionCacheLimiter 属性,显式指定为 public 或 private 以覆盖默认行为。

SEO 影响
合理的缓存策略能减少重复抓取,提高爬虫效率。搜索引擎通常尊重网站的缓存指令,良好的缓存设置有助于提升网站响应速度和用户体验,间接对排名产生积极影响。

以上就是PHP的Yii框架中缓存的一些高级用法的详细内容,更多关于PHP Yii框架优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。