# 站点缓存

Source: https://support.kapsulehost.com/zh-cn/site-cache

缓存是 WordPress 站点可以获得的最大单一速度提升：整页缓存直接提供生成好的 HTML，完全不运行 PHP，而对象缓存则将数据库查询结果保留在内存中。本指南将介绍这两者，说明哪些内容会自动绕过缓存，以及如何清除和预热缓存。

## 缓存设置在 KPanel 中的位置

1. 登录 [KPanel](https://kpanel.kapsulehost.com)。
2. 点击左侧边栏中的 **网站**，然后点击对应站点。
3. 在站点左侧菜单中，打开 **WordPress**，再打开 **缓存**。

直接访问地址为 `/websites/<site-id>/cache`。

![KPanel 中某站点的缓存设置](https://support.kapsulehost.com/help/screenshots/site-cache.ebc987e4.webp)

> **Note:** **WordPress** 分组仅在 WordPress 和 WooCommerce 站点中显示。此处的缓存属于套餐权益：整页缓存和对象缓存包含在 Managed WordPress 中。在其他套餐中，此页面会显示升级面板，说明可用的功能，而不是显示实际控制项。

## 整页缓存

整页缓存会存储页面生成好的 HTML，并直接提供给下一位访客。对于匿名访客而言，这意味着完全不执行 PHP，也不进行任何数据库查询：请求在 WordPress 被加载之前就已经得到响应。

卡片上会显示 **On** 或 **Off** 状态标签，当缓存开启时，还会显示启用日期、路由是否已确认，以及缓存有效期。

要启用它，请点击 **启用整页缓存**。要再次关闭，请点击 **Disable**。

当您发布或更新文章时，缓存会自动清除，因此您的更改会立即生效，而无需等待缓存有效期到期。

> **Tip:** 如果您的站点主要由匿名访客浏览，这是此页面上价值最高的开关。首字节时间（time to first byte）往往会相差一个数量级，因为 WordPress 请求中最慢的部分已不再发生。

## 清除与预热

一旦整页缓存开启，会出现两个操作。

**清除缓存** 会立即清空缓存。请在进行 WordPress 不会视为文章更新的更改之后使用它：例如编辑主题文件、更改小组件（widget）、更新菜单，或修改会影响输出的插件设置。此后每个页面的下一位访客都会获得全新副本。

**预热缓存** 会预先抓取您的页面，使其在访客请求之前就已被缓存。预热完成后，横幅会显示总页面数中有多少已被预先缓存，并列出前几个 URL。

设计变更后的常规顺序是：先清除，再预热。这样就不会有访客不幸成为承受首次未缓存渲染代价的人。

关于位于站点前端的边缘缓存，这是另一个独立的层级，请参阅[清除 CDN 缓存](https://support.kapsulehost.com/zh-cn/cdn-cache-purge)。

## 永远不会被缓存的内容

某些 URL 必须始终运行 PHP，因为它们的输出因访客而异，或存在副作用。以下路径会自动被绕过，您无需进行任何配置：

| 路径 | 原因 |
|---|---|
| `/wp-admin/` | WordPress 后台始终是动态的 |
| `/wp-login.php` | 登录页面永远不会被缓存 |
| `/cart/` | WooCommerce 购物车因访客而异 |
| `/checkout/` | WooCommerce 结账因访客而异 |
| `/my-account/` | WooCommerce 账户页面因访客而异 |
| `/wp-cron.php` | 定时任务必须真正执行 |
| `/?wc-ajax=*` | WooCommerce AJAX 端点 |

除了路径规则之外，Cookie 也很重要。已登录的 WordPress 用户，或拥有活跃 WooCommerce 会话 Cookie 的访客，始终会收到动态响应，即使该页面对其他所有人来说是已缓存的。这就是为什么店主在浏览自己的网站时常常感受不到任何效果，而匿名访客却能感受到。

> **Warning:** 由于您通常处于登录状态，在平常使用的浏览器中测试缓存行为会产生误导。请在隐私窗口中测试，或使用未登录的浏览器。

## 对象缓存

对象缓存是另一个不同的层级。它不存储生成好的页面，而是将数据库查询结果和 WordPress 瞬态（transient）数据保留在内存中，使重复的工作不必重复进行。

卡片上会显示 **On** 或 **Off** 状态标签，当缓存开启时，还会显示启用日期。使用 **开启** 和 **关闭** 来更改设置。

对象缓存恰好能解决整页缓存无法解决的问题：已登录用户、后台管理界面，以及购物车和结账等因访客而异的页面。这使得它对流量较大的商店和会员网站尤其有价值，因为这些站点的大部分流量是经过身份验证的，因此永远不会被整页缓存。

两者同时运行是常规配置。整页缓存处理匿名流量，而对象缓存则加速所有本来就必须运行 PHP 的部分。

## 选择要启用的功能

- **内容型站点，访客以匿名为主。** 整页缓存是优先事项。对象缓存会在此基础上带来较小的额外提升。
- **WooCommerce 商店。** 两者都应启用。整页缓存仍能覆盖浏览访客所访问的产品和分类页面，而对象缓存则承担永远无法被缓存的购物车、结账和账户页面。
- **几乎所有人都已登录的会员或社区网站。** 对象缓存承担主要工作，因为大多数请求按设计都会绕过页面缓存。

## 故障排查

**我更新了站点，但访客仍然看到旧版本。** 先清除缓存，再预热。如果内容仍然是旧的，请记住可能还存在边缘缓存：请参阅[清除 CDN 缓存](https://support.kapsulehost.com/zh-cn/cdn-cache-purge)。

**缓存对我没有任何作用。** 您几乎可以肯定处于登录状态。请在隐私窗口中检查。

**购物车或某个表单对匿名访客表现异常。** 标准的商务路径会自动被绕过，但位于非标准 URL 上的自定义或插件提供的动态页面则不会。如果某个页面绝不应被缓存，却不在绕过列表中，建议向支持团队反馈，以便我们检查相关规则。

**卡片显示缓存功能包含在 Managed WordPress 中。** 您当前的套餐不包含此功能。横幅会链接到套餐页面。

**路由检查待处理。** 缓存已启用，但路由确认尚未完成。请稍等片刻后刷新。

**页面显示了错误的个性化内容。** 任何个性化内容都必须从页面缓存中排除，或在客户端渲染。如果某个插件在本可缓存的 URL 上对输出进行了个性化处理，却没有设置会话 Cookie，页面缓存就无法得知这一点。请在隐私窗口中测试，如发现此类情况，请向支持团队反馈。

## 相关页面

- [站点性能与 APM](https://support.kapsulehost.com/zh-cn/site-performance)，用于衡量缓存是否真正带来了改善。
- [站点流量分析](https://support.kapsulehost.com/zh-cn/site-analytics)，查看边缘缓存命中率。
- [启用 CDN](https://support.kapsulehost.com/zh-cn/cdn-enabling)，在以上内容之前再加一层边缘缓存。
- [创建备份](https://support.kapsulehost.com/zh-cn/taking-a-backup)，在对线上站点进行较大改动之前使用。
