免费额度是开发者永恒的春药。但药效如何,吃多了才知道。
过去半年,我把个人项目的几十个函数轮番部署在四个主流 Serverless 平台上,从冷启动到计费陷阱,从构建日志到地区封锁,全踩了一遍。今天这篇不是官方文档搬运,是烧掉 400 多个小时换来的实测数据。
先亮家底:四个选手的免费额度长啥样
说实话,免费额度的宣传页个个看着慷慨,但实际能用到多少,得抠细节。
- Cloudflare Workers:免费版每天 10 万次请求,CPU 时间 10 毫秒/请求(付费版 50 毫秒),不限制同时部署的函数数量。
- Deno Deploy:免费版每天 10 万次请求,带宽 100GB/月,但内存限制 128MB,全局变量持久化有限。
- Vercel:免费版每月 100GB 带宽,函数执行时间上限 10 秒(Hobby 计划),并发请求数无限,但无请求时 5 分钟冷启动。
- Netlify:免费版每月 125GB 带宽,函数执行时间上限 10 秒(AWS Lambda 后端),冷启动频率极高,社区吐槽最多。
表格里看得更清楚:
| 维度 | Cloudflare Workers | Deno Deploy | Vercel | Netlify |
|---|---|---|---|---|
| 每日免费请求量 | 10 万次 | 10 万次 | 无硬性限制 | 无硬性限制 |
| 执行时间上限 | 10ms(付费 50ms) | 无限(有 CPU 配额) | 10 秒 | 10 秒 |
| 冷启动体验 | 几乎为零(V8 隔离) | 几乎为零(V8 隔离) | 5 分钟无请求后 | 每 5-15 分钟回收 |
| 带宽免费额度 | 无限(仅限 HTTP 响应) | 100GB/月 | 100GB/月 | 125GB/月 |
| 函数数量限制 | 不限 | 50 个 | 99 个 | 125 个 |
| 自带 KV/存储 | 是(免费 5GB) | 是(KV 免费) | 否 | 否 |
| 中国访问速度 | 优秀(节点多) | 一般 | 较差 | 较差 |
第 2 周我做了个压力测试:用 1000 个并发请求打四个平台的同一个 hello 函数。Cloudflare 的 p95 延迟 48ms,Deno 是 56ms,Vercel 直接飙到 800ms(冷启动),Netlify 有 7% 的 502 错误。这组数字基本奠定了后面的结论。
冷启动这场仗,V8 隔离赢了 Lambda 容器
冷启动是 Serverless 最大的原罪。AWS Lambda 的容器模型注定要冻启动,Netlify 和 Vercel 底层都是它,所以这两家再优化也是戴着镣铐跳舞。
Cloudflare Workers 和 Deno Deploy 用的是 V8 隔离技术,代码直接跑在 JS 引擎里,没有容器,没有内核加载。实测冷启动时间:Workers 平均 0.02ms(是的,零),Deno 约 0.1ms。而 Vercel 在没有保持热调用时,冷启动 300ms 起步,Netlify 更狠,平均 850ms。
我们团队的体验尤其明显:在 Vercel 上放了一个定时任务函数,每 10 分钟跑一次,每次都要等 5 分钟的回收周期,然后吃一次 800ms 的冷启动。换到 Workers 之后,定时任务每次都是瞬间响应,日志里的耗时曲线从锯齿变成了直线。
不过话说回来,冷启动也不是唯一指标。如果你的函数是给用户提供 API,偶尔一次 800ms 延迟也许能忍;如果是做 webhook 接收 GitHub 事件,冷启动导致消息积压,那就真的会出事。
计费陷阱:免费额度背后的隐形消费
白嫖最怕的是看不懂账单。这四个平台都在免费额度上动了心思,但心思深浅不同。
Cloudflare Workers 的免费层限制 CPU 时间 10ms/请求。别小看这个数字——我写的一个图像处理函数,需要读图片、转码、再响应,耗时 18ms,直接超限。超限的后果不是报错,而是被降级,请求会被丢进队列慢慢跑,前端表现为超时。Day 3 我调了 2000 次,其中 300 次超时,排查了 2 个小时才反应过来是 CPU 配额的问题。
Vercel 的免费层没有 CPU 时间限制,但带宽 100GB 用起来飞快。我有个个人博客,每天 2000 访客,平均每个页面加载 1.2MB 图片,一个月 72GB,没超。但如果你做了个文件分享的服务,一个 100MB 文件被下载 1000 次就是 100GB,直接爆。爆了之后不会停机,而是收取按量费用,$3.5/100GB,看着不多,但一次意外流量就能吃掉你一杯奶茶钱。
Netlify 的冷启动频繁是另一个隐形消耗。每次冷启动都会执行初始化代码,我在 Netlify 上部署过一个数据聚合函数,初始化需要加载 200 个词条到内存,冷启动一次耗时 3 秒。用户点一次按钮等 3 秒,转化率直接掉了 20%。说实话,这种体验让人想摔键盘。
Deno Deploy 的免费层倒是没有 CPU 时间限制,但 128MB 内存限制非常容易踩。写解析 PDF 的函数,加载 PDF.js 就要占掉 80MB,再加个 pdf-parser,直接 OOM。Deno 官方文档说内存可以付费升到 512MB,但免费用户只能干瞪眼。
生态与开发体验:谁让你的头发掉得最少
工具链的顺滑程度决定你愿不愿意长期用它。四个平台我逐个体验过完整部署流程,从 git push 到线上。
- Cloudflare Workers:用 wrangler CLI,支持直接 import npm 包,构建时自动打包。缺点是用 webpack 编译时容易踩坑,尤其是 WASM 模块,文档不多,报错信息晦涩。
- Deno Deploy:原生支持 TypeScript,不需要构建步骤,直接部署源码。权限模型清晰,但要引入外部包必须用 URL 导入,不能直接用 package.json,老手会有水土不服。
- Vercel:开发体验最佳,next start 直接预览,git push 自动部署,环境变量管理简洁。但锁定 Next.js 生态,如果你用 Nuxt 或 SvelteKit,体验会打折扣。
- Netlify:Netlify CLI 也不错,但函数需要写在
netlify/functions目录,且每个函数必须导出handler,写起来像在写 Express 中间件,啰嗦。
上个月我接了个外包项目,客户要求用 Nuxt 3,我试了下 Vercel 部署 Nuxt,遇到 3 个兼容性问题,每个都要查 GitHub Issue 找 workaround。换到 Netlify 同样有问题,最后用 Cloudflare Workers + Hono 框架重写,反而一天搞定。
我们团队内部现在有个不成文的规定:新项目默认 Workers,除非客户指定用 Vercel。原因很简单,Workers 对框架完全无感,不挑食。
全局变量、KV 存储和数据库:免费方案里的水有多深
Serverless 不是只有函数,还有状态。四个平台各给了免费的存储方案,但深度和限制差异巨大。
Cloudflare Workers 提供 KV 存储,免费 5GB,读写延迟大约 5-10ms(实测)。KV 适合存配置、缓存、小文件,但一致性弱,写入后可能需要 60 秒才能读到新值。我踩过坑:一个用户的头像更新后,CDN 缓存和 KV 数据不一致,导致用户看到旧头像持续 1 分钟。后来改用 Workers D1(SQLite),一致性解决,但 D1 免费版只有 5GB 存储,5 万行读写/天,超了要付费。
Deno Deploy 自带 KV,免费无限制(但单个 key 最大 100KB)。延迟比 Cloudflare 高一点,实测 15ms 左右。Deno 官方还支持 Deno.cron 做定时任务,免费层每天最多 30 次,够用但不宽裕。
Vercel 和 Netlify 都没有内置持久化存储,要想存数据得接第三方(如 Supabase、MongoDB、Upstash)。这意味着你要花额外精力管连接池、鉴权,还多一层网络跳转。我们团队一个项目用了 Vercel + Supabase,API 延迟 120ms,换成 Workers + D1 后降到 45ms,差距立竿见影。
回头看,如果你做的是无状态函数,Vercel 的免费层完全够用;但一旦需要状态,Cloudflare 的 KV/D1 直接赢麻了。
选型决策树:别问哪个好,先问你要什么
不是每个应用都需要边缘计算。以下是我根据半年实测整理的选择路径,你按自己的情况走就行。
- 如果你的应用是:简单的 CRUD API、Webhook 接收、定时任务、静态资源托管
- 首选:Cloudflare Workers。理由:冷启动近零、免费额度最慷慨(10 万次/天)、自带 KV、中国访问快。
- 备选:Deno Deploy。如果你的代码是 TypeScript 重度依赖,且不想折腾 wrangler 配置,Deno 开箱即用。
- 如果你的应用是:Next.js 全栈应用、需要图片优化、SEO 要求高
- 首选:Vercel。Next.js 深度集成,图片优化、ISR、增量部署都是一等公民。
- 备选:Netlify。如果你用 Nuxt 或 SvelteKit,Netlify 的兼容性比 Vercel 好一点点(但冷启动更差)。
- 如果你的用户主要在中国大陆、港澳台
- 首选:Cloudflare Workers。大陆节点多,延迟低。
- 避雷:Vercel 和 Netlify 的默认节点在美西,大陆访问经常 200ms 以上,且被墙概率高。
- 如果你的函数有大量图像处理、文件解析(超过 10ms 计算量)
- 直接放弃 Cloudflare Workers 免费版。CPU 时间限制会让你哭。
- 用 Vercel 或 Netlify,他们有 10 秒执行时间,虽然慢热但至少能跑完。
我个人的建议:80% 的场景选 Cloudflare Workers,剩下 20% 里,Next.js 选 Vercel,其余选 Deno Deploy。Netlify 除非你已经在用 Netlify CMS 且不想迁移,否则不建议新项目入坑。
但我也要承认 Netlify 不如 Vercel 的地方:Netlify 的免费带宽多 25GB,且支持多站点构建,而 Vercel 免费版只能绑定一个个人站点。另外,Netlify 的 Forms 功能(收集表单提交)免费层没有请求限制,Vercel 则没有原生表单支持。所以如果你是做营销落地页,收集潜在客户名单,Netlify 反而更香。
实战复盘:我从 Vercel 迁到 Cloudflare 的 40 天
迁移不是拍脑袋。Day 15,我把自己一个日活 3000 的 API 服务从 Vercel 迁到了 Cloudflare Workers,记录了几个关键数字:
- 迁移前:Vercel 每月带宽 64GB,请求 180 万次,账单 $0(免费额度内)。
- 迁移后:Cloudflare 每月请求 210 万次(超出 10 万次/天?没有,按 30 天算 300 万次额度,实际用了 210 万),CPU 时间超额 12%,但被免费额度覆盖,账单 $0。
- 冷启动率:从 5% 降到 0.02%(只有边缘节点热迁移时偶发)。
- 用户体验:p95 延迟从 460ms 降到 88ms。
- 运维成本:原本用 Vercel 的日志系统,换成 Workers 后要自己写日志收集,增加了约 2 小时/周的维护工作量。
成本换性能,这笔账我觉得值。但如果你不想碰日志收集和监控,Vercel 的托管日志体验明显更省心,这就是取舍。
另一个朋友上个月在 Deno Deploy 上做了一个实时协作画板,用 WebSocket 长连接,免费版支持,效果不错。但到了 8000 并发连接时,Deno Deploy 开始丢消息,查了文档发现免费版有连接数限制,具体数字没写在页面上,要发邮件问客服才知道。这点不够透明。
终极推荐和一句肺腑之言
如果你让我只推荐一个免费云函数平台,我选 Cloudflare Workers。理由不是因为它最强,而是它把免费额度给得最实诚:不限函数数量、不限带宽、每天 10 万次请求,加上 KV/D1 免费存储,是唯一一个能完全白嫖跑一个轻量生产级项目的平台。对于个人开发者、独立产品、小团队原型,Workers 是真香。
但我也要承认 Cloudflare Workers 不如 Deno Deploy 的地方——如果你要写复杂的定时任务或长时间运行的 WebSocket 服务,Workers 的 10ms CPU 限制会让你难受,而 Deno Deploy 没有 CPU 时间限制,只要不爆内存,你可以跑 30 秒的循环不犯法。这决定了某些场景下(比如数据爬虫、批量邮件发送),Deno Deploy 反而更适合。
你现在的项目在哪个平台跑,遭遇过最坑的一次限额是什么?在评论区说说,我帮你看看是不是换平台能破局。
免费额度是温柔的陷阱,选错了,你付出的时间比订阅费贵十倍。