
大家好,我是 Immerse
专注分享 AI 玩法、独立开发与AI 出海的 AGI 实践者,更多干货欢迎关注公众号 #沉浸式AI 或访问 yaolifeng.com
传统 Node.js 应用上线需要多少基础设施?
一个 Express 服务本地跑起来很简单,但要让它安全稳定地运行在生产环境,你得配 Nginx 反向代理、上 PM2 或 systemd 管进程、打包 Docker 镜像——然后还得时刻有一台服务器开着,不管有没有请求。
但用户量上来以后,你得加负载均衡、再起多台服务器来分摊压力,成本直线上升,而且低峰期那些空闲机器照常计费。
Cloudflare Workers 换了个思路。
不是"让服务器更高效",而是"干掉永远在线的服务器"。
最简的 Worker 就是一个 JavaScript bundle,导出一个 fetch handler:
export default {
async fetch(request: Request): Promise<Response> {
return new Response('Hello World');
},
};
没有 app.listen()——因为没有一台服务器在持续监听端口。
请求来了 Workers 才执行代码,跑完就回收。这也是它叫 serverless compute 的原因。

Cloudflare Worker 概念示意
传统模式按"机器开着"付费,Workers 按"请求来了"付费。
没有请求的时候,不产生任何计算费用。对于流量波动大或还在早期验证阶段的产品来说,这直接降低了一些成本。
Workers 跑在 V8 isolates 里,不是容器。
一个 isolate 的冷启动比 Node.js 容器或虚拟机快约 100 倍。这意味着用户几乎感知不到冷启动延迟。
Cloudflare 的网络覆盖全球 330+ 城市,距 95% 的互联网用户不到 50 毫秒。
你的 Worker 同时部署在所有节点上,用户请求始终走最近的节点处理。

全球部署架构示意
说到部署:
npx wrangler deploy
跑完这行命令,你的代码已经在全球 330+ 个节点上运行了。
没有 Dockerfile 要写,没有 Nginx 要配,没有 SSH 要连。
假设你有这样一个 Express 应用:
import express from 'express';
const app = express();
app.get('/api/users', (req, res) => {
res.json([{ id: 1, name: 'Alice' }]);
});
app.post('/api/users', (req, res) => {
// 创建用户
res.status(201).json({ id: 2, name: 'Bob' });
});
app.listen(3000);
用 Hono 改写,代码结构几乎不变:
import { Hono } from 'hono';
const app = new Hono();
app.get('/api/users', c => {
return c.json([{ id: 1, name: 'Alice' }]);
});
app.post('/api/users', c => {
// 创建用户
return c.json({ id: 2, name: 'Bob' }, 201);
});
export default app;
差异很小:req/res 换成 Hono 的 c 上下文对象,去掉 app.listen(),直接导出 app。
Hono 会自动把它包装成 Worker 期望的 fetch handler。
部署验证:
npx wrangler deploy
终端会输出你的 Worker 上线 URL,直接在浏览器打开就能看到效果。
Workers 能做的事情远不止返回 JSON。它可以渲染 HTML、跑 React,也支持全栈框架直接在 Workers 上运行——Astro、Next.js、TanStack Start、SvelteKit 都兼容。
Workers 的另一个好处是可以直接调用 Cloudflare 其他产品,不需要额外安装 SDK 和配置密钥:
这些通过 bindings 对接,部署时声明即可。
Workers 的 CPU 执行时间有限制——免费计划 10 秒,付费计划 30 分钟。长时间运行的计算任务不适合直接跑在 Worker 里。
如果你需要处理耗时操作,得用 Queues 拆成异步任务,或者用 Durable Objects 维持长期状态。