我如何通过从 Durable Objects 切换到静态资源缓存,将 Cloudflare 账单减少一半
我收到了 12 月份的 Cloudflare 账单,发现了一个奇怪的地方:Durable Objects 费用为 12.50 美元。
Durable Objects 是 Cloudflare 存储需要在请求之间持久化的数据的方式(有状态的无服务器计算),例如实时聊天消息、多人游戏状态或协作编辑。
我在 Cloudflare 上托管了几个网站,其中大部分基本上是静态博客。为什么我需要为 Durable Objects 付费呢?
罪魁祸首:OpenNext 的默认缓存
如果你使用 OpenNext 将 Next.js 部署到 Cloudflare Workers,默认配置会使用 Durable Objects 来实现 ISR(增量静态再生)缓存失效。这对于需要按需重新验证的动态网站来说是有意义的,但对于博客来说呢?完全是杀鸡用牛刀。
默认配置如下所示:
// open-next.config.ts (默认)
import { defineCloudflareConfig } from "@opennextjs/cloudflare";
export default defineCloudflareConfig();这个看似无害的配置启用了:
- DOShardedTagCache:用于基于标签的缓存失效的 Durable Objects
- BucketCachePurge:用于缓存清除的 Durable Objects
- DOQueueHandler:用于队列处理的 Durable Objects
每次调用它们都会产生费用。
解决方法:静态资源缓存
如果你的网站大部分是静态的(比如博客),你可以切换到静态资源缓存,它会在构建时将所有内容存储在 Workers 静态资源中。没有 Durable Objects,就没有持续的费用。
// open-next.config.ts (优化后)
import { defineCloudflareConfig } from "@opennextjs/cloudflare";
import staticAssetsIncrementalCache from "@opennextjs/cloudflare/overrides/incremental-cache/static-assets-incremental-cache";
export default defineCloudflareConfig({
incrementalCache: staticAssetsIncrementalCache,
enableCacheInterception: true,
});就是这样。两行配置更改为我节省了 12.50 美元/月。
权衡
有一个陷阱:你会失去 ISR 重新验证功能。使用静态资源缓存时,你的内容只有在重新部署时才会更新。对于我控制内容更改的博客来说,这完全没问题。我发布新文章时也会进行部署。
但是,如果你有:
- 频繁更新的用户生成内容
- 需要按计划重新验证的页面
- 在部署之间会更改的动态数据
那么你可能需要 Durable Objects,而且这笔费用是合理的。
结果
更新(2026 年 1 月):我知道,这不是一笔巨款,但 1 月份我所有网站的账单仅为 6.47 美元。我已将此修复应用到所有网站,Durable Objects 的费用已经消失了。
| 服务 | 十二月 | 一月 |
|---|---|---|
| Durable Objects | $12.50 | $0.00 |
| Workers 付费 | $5.00 | $5.00 |
| AI Neurons (RTN)* | $8.31 | $0.42 |
| Workers CPU | $0.42 | $1.00 |
| Vectorize | $0.05 | $0.05 |
| 总计 | $26.28 | $6.47 |
*我还单独优化了聊天机器人的 AI 使用情况,这占了 RTN 节省的大部分。
如何检查你是否需要 Durable Objects
问问自己:
- 我的内容在部署之间会更改吗?如果不会,请使用静态资源缓存。
- 我在 Next.js 页面中使用
revalidate吗?如果不会,请使用静态资源缓存。 - 我的网站主要是博客或文档吗?如果是,请使用静态资源缓存。
对于大多数个人网站和博客来说,静态资源缓存是正确的选择。把省下来的钱用在更有用的地方吧。