← 返回博客

我与 Workers 的爱恨情仇

2026-06-11 · 34 次阅读 · 随想技术Workers

我与 Workers 的爱恨情仇

从第一个 hello world 到博客上线,中间踩的坑比我想象的要多。

但最后,还是爱上了这个平台。


初见:就这?

第一次用 Workers,是被朋友安利的。

他说:"免费、全球加速、无限流量,写个 JS 就能跑。"

我心想,有这么好吗?

打开文档,写的第一个 Worker 是这样的:

javascript
addEventListener('fetch', event => {
event.respondWith(new Response('Hello World!'));
});

保存,部署,等了 3 秒,访问 xxx.workers.dev

真的亮了。

那一刻的感觉,就像第一次用上了电——这玩意是真的东西。


第一个坑:ES Module 格式

开始做稍微复杂一点的东西,想接 D1 数据库。

文档说要用 ES Module 格式。OK,改 export default

然后开始报错。SyntaxError: Unexpected token

查了半小时,才知道 Workers 分两种格式:

- Service Worker 格式 — 早期写法,addEventListener 那种
- ES Module 格式 — 现代写法,export default 那种

接 D1 必须用 ES Module,不能混用。

文档里有一句小字提到了,但我是真的看了三遍才发现。


第二个坑:URL 构造

部署到线上之后,发现一个奇怪的问题。

本地调试好好的,线上有些功能不正常。

追了半天,发现是 Response.redirect() 的问题。

javascript
// ❌ 这样会报错
return Response.redirect("/admin/login");

// ✅ 需要传完整 URL
return Response.redirect(new URL("/admin/login", request.url).toString());

本地环境没有域名这个概念,所以 new URL("/admin/login", "http://localhost:8787") 能正常解析。

但线上域名是 blog.woail.com,Workers 内部不认识这个路径。

这个坑,踩了我一整晚上。


第三个坑:部署覆盖数据

终于把博客跑起来了,兴冲冲地在后台写了一篇文章。

然后第二天,wrangler deploy 了一下。

文章没了。

原来,数据是硬编码在代码里的。重新部署,代码里的旧数据覆盖了 D1 数据库的修改。

又花了半小时把文章重写了一遍。

这次之后,我把数据全部迁到了 D1,后台改成读写数据库,代码里只保留演示数据。

教训:架构要一开始就定好,后期改代价很大。


爱上它的瞬间

说了这么多坑,但真正让我爱上 Workers 的,是这个场景:

有一天,我在咖啡馆改代码。手机响了,博客有个 bug 需要修。

我打开手机浏览器,进了 Cloudflare 控制台,改了改 Worker 代码,点了个"保存"。

30 秒后,博客修复了。

没有任何服务器需要连接,没有任何部署流程需要等待,代码直接在边缘节点上生效了。

那一刻我在想,这就是未来吧。


几个真心话

用 Workers 快半年了,有几句话想说:

1. 它不是万能的

Workers 适合轻量逻辑、API、静态内容。不适合 CPU 密集型任务,不适合大文件处理,不适合需要长期后台运行的东西。搞清楚它的边界,比什么都重要。

2. 免费额度很良心

每天 10 万次请求,D1 5GB 存储,R2 10GB。对于个人项目来说,基本等于不要钱。

3. 文档在变好

早期的文档确实一言难尽,但现在越来越完善。社区也很活跃,踩过的坑基本都能找到答案。

4. 冷启动快得离谱

我做过测试,从零启动一个 Worker 到响应,第一个字节的平均时间是 5-20ms。这在传统服务器上几乎不可能实现。


最后

技术选型这件事,从来没有银弹。

Workers 解决不了所有问题,但在这个"快速上线、轻量运维"的场景下,它确实是最优解之一。

我的博客,就跑在这上面。

如果你也在折腾 Web 开发,不妨试试。反正免费,也不会亏。


有问题欢迎交流。TG: @xiaokang

← 小康随笔