返回博客

我如何通过从 Durable Objects 切换到静态资源缓存,将 Cloudflare 账单减少一半

2025-12-133 min read

我收到了 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

问问自己:

  1. 我的内容在部署之间会更改吗?如果不会,请使用静态资源缓存。
  2. 我在 Next.js 页面中使用 revalidate 吗?如果不会,请使用静态资源缓存。
  3. 我的网站主要是博客或文档吗?如果是,请使用静态资源缓存。

对于大多数个人网站和博客来说,静态资源缓存是正确的选择。把省下来的钱用在更有用的地方吧。

资源

保持更新

在您的收件箱中获取最新的文章和见解。

Unsubscribe anytime. No spam, ever.