网页缓存

CodeIgniter 支持网页缓存,以实现最佳性能。

虽然 CodeIgniter 运行速度很快,但页面中显示的动态信息量会直接影响所消耗的服务器资源、内存以及 CPU 开销,进而影响页面加载速度。由于缓存页面会以完全渲染后的状态进行保存,因此启用缓存可获得极其接近静态网页的性能。

缓存如何工作?

缓存可按页面启用,并可设置页面在刷新前保持缓存的时间。

备注

按页面是指按 URI。自 v4.5.0 起,请求的 HTTP 方法也会被纳入考虑。这意味着如果 HTTP 方法不同,相同的 URI 将被分别缓存。

当页面第一次加载时,系统会使用当前配置的缓存引擎对页面进行缓存。在随后的页面加载中,将直接检索缓存并发送给用户的浏览器。

如果缓存已过期,系统会在发送到浏览器之前将其删除并刷新。

备注

Benchmark 标签不会被缓存,因此在启用缓存时仍可查看页面加载速度。

配置缓存

设置缓存引擎

在使用网页缓存之前,必须通过编辑 app/Config/Cache.php 来设置缓存引擎。详见 配置缓存

设置 $cacheQueryString

可以通过 Config\Cache::$cacheQueryString 设置在生成缓存时是否包含查询字符串。

有效选项包括:

  • false:(默认值)禁用。不考虑查询字符串;对于具有相同 URI 路径但查询字符串不同的请求,将返回相同的缓存。

  • true:启用,考虑所有查询参数。请注意,这可能会导致同一页面反复生成大量缓存。

  • array:启用,但仅考虑指定的查询参数列表。例如:['q', 'page']

设置 $cacheStatusCodes

Added in version 4.7.0.

可以通过 Config\Cache::$cacheStatusCodes 控制允许缓存哪些 HTTP 响应状态码。

有效选项包括:

  • []:(默认值)缓存所有 HTTP 状态码。这保持了向后兼容性,但可能会缓存临时的错误页面。

  • [200]:(推荐)仅缓存成功的响应。这可以防止缓存应为临时性的错误页面(404、500 等)。

  • 状态码数组:仅缓存特定的状态码。例如:

    • [200, 404]:缓存成功的响应和未找到页面。

    • [200, 404, 410]:缓存成功的响应和特定的错误代码。

    • [200, 201, 202, 203, 204]:所有 2xx 成功响应。

警告

使用空数组 [] 可能会缓存临时的错误页面(404、500 等)。对于生产环境的应用,建议将其限制为 [200],以避免缓存本应是临时性的错误。例如,缓存的 404 页面即使在资源创建后也会保持缓存状态,直到缓存过期。

备注

无论此项如何设置,DownloadResponseRedirectResponse 实例永远不会被 PageCache 过滤器缓存。

启用缓存

若要启用缓存,请在任何控制器方法中加入以下标签:

<?php

$this->cachePage($n);

其中 $n 是希望页面在两次刷新之间保持缓存的 秒数

上述标签可以放在方法内的任何位置。它不受出现顺序的影响,因此可以放在任何认为逻辑合理的地方。一旦标签就位,页面就会开始被缓存。

重要

如果更改了可能影响输出的配置选项,必须手动删除缓存。

删除缓存

如果不再希望缓存某个页面,可以移除缓存标签,该页面在过期后将不再刷新缓存。

备注

移除标签不会立即删除缓存。它必须正常过期。