React 应用的边缘缓存策略
使用 Cache-Control 标头、Cloudflare KV 和 R2,在边缘缓存渲染后的页面及静态资源
React 应用的边缘缓存策略 是 CoddyKit 上的免费 React Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 React Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 React Academy 课程共包含 4 节课。
用于边缘缓存的 Cache-Control 标头
Cache-Control 响应标头控制 Cloudflare(以及其他 CDN)缓存 SSR 响应的时长。关键指令包括:max-age(浏览器缓存时长)、s-maxage(CDN/共享缓存时长)以及 stale-while-revalidate(在后台重新验证时提供过期内容)。
s-maxage 与 max-age
s-maxage 由共享缓存(CDN)遵循,而 max-age 用于浏览器缓存。对于 SSR 页面,通常应设置 s-maxage=60(CDN 缓存 60 秒)和 max-age=0(浏览器始终重新验证),这样所有用户都能从边缘缓存获得相对新鲜的内容。
使用 stale-while-revalidate 缓存 SSR 页面
在 Cache-Control 标头中添加 stale-while-revalidate=30,会告知 Cloudflare 在后台获取新版本的同时立即提供缓存页面。用户始终能获得快速响应;内容的最大过期时长为 s-maxage 加上 stale-while-revalidate 秒数。
个性化页面:Vary 标头
个性化内容(基于用户会话或区域设置)不得从共享缓存提供给错误的用户。Vary: Cookie 标头会告知 Cloudflare 将每个不同的 Cookie 值视为独立的缓存条目,从而避免将某个用户的数据提供给其他用户。
绕过已认证请求的缓存
一种常见模式是在决定是否使用缓存之前,先在 Worker 中检查会话 Cookie。如果存在会话 Cookie,就完全绕过缓存并渲染个性化响应。如果不存在会话 Cookie,该页面就是公开页面,可以从缓存提供。
Cloudflare KV:边缘键值存储
Cloudflare KV 是一种全球分布式键值存储,可以将数据存放在靠近用户的位置。您可以将渲染后的 HTML 缓存到 KV 中——将渲染后的页面作为值并设置 TTL,后续请求就能在边缘从 KV 读取,而不必再次使用 React 进行渲染。
KV 读取与写入性能
KV 读取速度很快,因为数据会复制到处理请求的边缘节点;典型读取延迟低于 5 毫秒。然而,KV 写入采用最终一致性:某个区域中的写入会在 60 秒内传播到全球所有边缘节点,这意味着部分用户可能会暂时看到过期数据。
Cloudflare R2:大型资源的对象存储
Cloudflare R2 是一种兼容 S3 且不收取出口费用的对象存储服务。它适合存储无法放入 KV 的大型资源,例如 WASM 模块、预渲染的 OG 图片和大型 JSON 数据集。Worker 通过绑定访问 R2,方式与访问 KV 相同。
用于精细失效的缓存标签
Cloudflare Enterprise 支持缓存标签:您可以使用 Cache-Tag: product-42 为响应添加标签;当产品 42 发生变化时,调用 Cloudflare 的 API,清除所有带有 product-42 标签的响应。这样无需清除整个缓存,就能实现精准的缓存失效。
处理部署时的缓存失效
部署新版 Worker 后,现有的缓存 HTML 可能仍引用旧的 JS 包文件名。一种稳健的策略是将部署版本加入缓存键,或者使用带版本的包文件名(通过 Vite 的内容哈希生成),这样旧 HTML 始终会引用有效且已缓存的 JS 文件。
基于 KV 的 HTML 缓存实现
在 KV 中缓存 SSR HTML 的 Worker 遵循以下模式:根据 URL(以及可选的区域设置)计算缓存键,检查 KV 是否命中,命中时立即返回缓存的 HTML。未命中时,使用 React 进行渲染,将结果以 TTL 存入 KV,然后返回刚刚渲染的 HTML。
Cloudflare KV 一致性模型
Cloudflare KV 对写入采用哪种一致性模型?
课程回顾
React 应用的边缘缓存结合了多种策略:使用 Cache-Control s-maxage 缓存公开页面,使用 Vary: Cookie 防止个性化响应被共享,使用 KV 缓存边缘的渲染 HTML,以及使用缓存标签实现精细失效。KV 的最终一致性模型意味着写入传播最多需要 60 秒,因此请据此设计 TTL 和失效策略。
常见问题解答
「React 应用的边缘缓存策略」课时是免费的吗?
是的 — 「React 应用的边缘缓存策略」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 React Academy 课程的其余内容,请升级到 CoddyKit PRO。 React Academy 课程共包含 4 节课。
「React 应用的边缘缓存策略」这节课中我会学到什么?
使用 Cache-Control 标头、Cloudflare KV 和 R2,在边缘缓存渲染后的页面及静态资源 你通过在浏览器中直接运行的动手代码来练习 React Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 React Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 React Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「React 应用的边缘缓存策略」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 React Academy 课中编写并运行代码吗?
能。每节 React Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。