01 它是干嘛的
Workers 是「无服务器函数」的一种,但部署位置从「某区域的机房」变成「全球每个边缘节点」。它适合处理请求改写、鉴权、A/B 测试、轻量 API,特点是冷启动几乎为零,且能把后端逻辑搬到离用户 20 毫秒的地方。
02 为什么会有它
传统函数计算的两个痛点:冷启动与「只在某一个地区」
传统 Serverless(如早期 Lambda)很方便,但有两点不理想:一是冷启动,函数长时间没人调用后被回收,下一次请求要先「开机」,可能多花几百毫秒到几秒;二是部署区域,函数跑在某个区域(如美东),亚洲用户调用要跨洋,网络延迟无法消除。
这两点都源于底层用了容器或虚拟机来隔离代码。Cloudflare 换了一条路:基于浏览器的 V8 引擎自研隔离技术(Isolate),不做进程级隔离而做引擎级隔离。一个实例里能同时跑上千个用户代码,启动成本几乎为零,内存开销降到几 MB。
结果是开发者第一次可以「写一次、全球部署、毫秒响应」,代价是运行环境受限(没有自带文件系统、不能跑任意二进制、初始 CPU 时间有上限),因此它擅长处理请求链路,不擅长跑长任务。
03 它怎么工作
代码上传后被分发到全球节点,请求到达时在同一进程内创建轻量隔离实例执行,省掉了启动操作系统的开销,因此冷启动通常在毫秒级。
零冷启动是怎么做到的:V8 Isolate 与边缘调度
- 1① 代码随流量就近加载
wrangler deploy 之后,代码包被复制到全球边缘节点,用户请求只会在本地节点执行。
- 2② 请求进入最近的隔离实例
节点复用常驻的 V8 进程,在同一进程里为不同租户建立隔离实例,避免重复启动。
- 3③ 执行你的处理逻辑
可以改写请求头、查询 KV、调用外部 API 或直接返回响应,整个执行受 CPU 时间上限约束。
- 4④ 访问边缘数据
KV 做全球最终一致的配置读取,D1 做关系数据查询,R2 存文件,Queues 做异步任务。
- 5⑤ 返回并触发后续动作
响应直接给用户;需要异步处理的(写日志、发消息)用 ctx.waitUntil() 在后台继续跑。
04 谁在用它
根据用户国家、设备、A/B 分组,把请求转发到不同后端或返回不同页面,源站代码零改动。
把鉴权、聚合、格式化放在边缘,后端只提供原子接口,移动端少跑几次远距离请求。
配合 D1、KV、R2 搭建博客、短链、待办清单等完整小应用,无需租用服务器。
用 Cron Triggers 定时跑清理任务,或接收第三方 webhook 后异步处理。
05 怎么用
需要一点 JavaScript/TypeScript 基础,但脚手架非常顺,5 分钟能跑出第一个「Hello World」。
- 01安装命令行工具:npm i -g wrangler,登录:wrangler login。
- 02创建项目:npm create cloudflare@latest my-worker,选择 Hello World 模板。
- 03本地开发:npm run dev,浏览器打开 localhost 调试。
- 04编写处理逻辑,导出 fetch 函数接收请求、返回 Response。
- 05发布上线:npm run deploy,几秒后即可通过 <项目名>.<账号>.workers.dev 访问。
- 06需要数据时绑定 KV / D1 / R2 / Queues,并在 wrangler 配置中声明绑定关系。
export default {
async fetch(request, env, ctx) {
const url = new URL(request.url)
// 1) 按路径返回不同内容
if (url.pathname === '/api/time') {
return Response.json({ now: Date.now(), edge: request.cf?.colo })
}
// 2) 读取 KV 中的配置(最终一致,读多写少场景)
const config = await env.MY_KV.get('site-config', 'json')
// 3) 生成响应,并加上缓存指令让边缘直接缓存
return new Response(`Hello from the edge. Config: ${JSON.stringify(config)}`, {
headers: {
'content-type': 'text/plain; charset=utf-8',
'cache-control': 'public, max-age=60'
}
})
}
}避坑提示
- !默认请求总时长上限 30 秒、CPU 时间更短,长任务(视频转码、大文件处理)应交给专用服务。
- !不要用进程内全局变量存业务数据,隔离实例可能被回收或复用,状态必须落到 KV/D1/R2。
- !依赖的 npm 包要在边缘环境兼容(不能用 node 原生模块如 fs),选包前先确认。
06 关键概念
- Isolate
- V8 引擎级的隔离沙箱,比容器轻得多,是零冷启动的关键。
- KV
- 全球分布的键值存储,读取极快,写入有延迟(最终一致),适合配置与静态数据。
- 冷启动
- 函数长时间未调用后的首次启动耗时,Workers 里通常可忽略。
- BFF
- Backend for Frontend,为前端定制的聚合层,常放在边缘以缩短链路。