# 网页缓存

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 页面即使在资源创建后也会保持缓存状态，直到缓存过期。

备注

无论此项如何设置，`DownloadResponse` 和 `RedirectResponse` 实例永远不会被 `PageCache` 过滤器缓存。

## 启用缓存

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

    <?php

    $this->cachePage($n);

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

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

重要

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

## 删除缓存

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

备注

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