工程与系统

Vercel、Cloudflare Pages、静态部署怎么选

先看运行时需求,再选部署平台。全栈 Next.js、Cloudflare 路线和纯静态站点,本来就不是同一类问题。

部署平台这道题最容易被问成“你站哪一边”,但真正决定成本的不是品牌,而是你的站点到底需要哪一种运行时。

先别按平台站队,先按运行时需求分层

按 2026 年 4 月我复核的官方文档,这三条路解决的并不是同一个问题:

  • Vercel 面向完整的 Next.js 运行时能力。
  • Cloudflare Pages / Workers 路线 更像你主动选择 Cloudflare 网络与边缘运行时之后,再决定要不要承接更完整的 Next.js 能力。
  • 静态部署 则是你先接受“构建时算完、上线后只发静态文件”的边界,再去换取最低基础设施复杂度。

如果一开始不把这三种运行时拆开,你就会把“部署平台选择”误做成价格或情绪问题。实际上,最该先回答的是:你的应用有没有真正依赖服务端动态能力。

如果你需要完整 Next.js 运行时,Vercel 通常是摩擦最小的一条路

Vercel 的 Next.js 官方文档对这一点表达得很直接:它把 ISR、SSR、Streaming、Image Optimization 这些能力都当成平台内的正常工作流来支持。比如文档里明确写到,SSR 通过 Vercel Functions 承接,ISR 的生成页会被缓存并持久化,Streaming 也有对应的函数与路由支持。

所以如果你的站点有这些需求:

  • 登录态或请求态决定页面输出
  • 需要 ISR 或较细粒度的缓存/重验证
  • 依赖流式响应、Route Handlers、图片优化
  • 不想自己额外承接适配层和平台差异

那 Vercel 往往是最省心的默认解。它的优势不是“更高级”,而是很多 Next.js 默认假设在这里更少需要你额外解释。

适合它的典型情况是:你想把精力放在产品、页面和数据流,而不是先研究运行时兼容表。

如果你就是要走 Cloudflare,先分清你选的是 Pages 静态层,还是 Workers / OpenNext 全栈层

Cloudflare 官方 Pages 文档本身已经给了一个很清楚的分流:如果要部署全栈 SSR 的 Next.js 应用,它让你去看 Next.js Workers guide;如果要部署静态 Next.js 站点,则走 Pages 的静态路径。也就是说,“Cloudflare Pages”本身并不自动等于“完整 Next.js 运行时”。

而 OpenNext 的 Cloudflare 文档又说明了另一件事:如果你真想在 Cloudflare 这条线上承接更多 Next.js 特性,你实际上是在选择一层适配与运行时工程,包括 bindings、caching、static assets 等额外关注点。

这条路成立的场景通常是:

  • 你已经明确想吃到 Cloudflare 的网络与边缘环境能力。
  • 你愿意接受更多平台适配判断,而不是只追求默认最省事。
  • 你的团队能维护“Next.js 能力 × Cloudflare 运行时”之间的边界。

换句话说,Cloudflare 路线不是不能做全栈,而是更适合把平台当成主动工程选择的人,而不是只想“先把站发上去”的团队。

如果站点真的能静态导出,静态部署通常是复杂度最低的一档

Next.js 的静态导出文档写得很明白:静态导出可以部署到任何能提供 HTML/CSS/JS 静态文件的 Web 服务器,但很多需要 Node.js 服务器或运行时动态逻辑的能力都不支持。

官方列出的不支持项包括:

  • 依赖 Request 的 Route Handlers
  • cookies
  • rewrites / redirects / headers
  • proxy
  • ISR
  • 默认图片优化
  • draft mode
  • server actions

这意味着静态部署最适合的是:

  1. 内容型站点或资源型站点;
  2. 大多数页面可在构建时决定;
  3. 你愿意用“预先生成 + 少量客户端增强”来换低运维;
  4. 你没有把请求态逻辑、身份态逻辑塞进主路径。

如果你的产品本来就是内容主导,静态部署往往不是“简陋版”,而是最诚实的运行时边界。

一个更实用的判断顺序

如果你让我只留一套选择顺序,我会这样判断:

第一问:有没有必须依赖服务端请求态的页面

如果有,比如鉴权、个性化、实时 SSR、依请求返回不同结果,那就先别看纯静态。

第二问:要不要主动吃 Cloudflare 路线的适配成本

如果你明确要 Cloudflare 的网络与边缘能力,并且愿意接受平台适配,那走 Cloudflare + Workers / OpenNext 是主动选择;如果不是,就不要为了“感觉更先进”硬选这条路。

第三问:是不是内容站、资源站、营销站为主

如果是,而且运行时动态需求很少,静态导出通常比你想象中更够用,也更容易长期稳定。

第四问:团队最稀缺的是哪种注意力

  • 稀缺的是产品迭代注意力:优先低摩擦平台。
  • 稀缺的是平台控制权:可接受更强适配路线。
  • 稀缺的是运维预算与复杂度余量:优先静态边界。

这不是“谁更好”,而是哪条边界更像你当前的系统

很多部署返工,并不是平台不行,而是系统边界没想清楚。你明明需要 SSR,却选了静态;你其实只要静态,却先接了一整套全栈运行时;你只是想用 Cloudflare CDN,却一脚踏进完整适配工程。

我现在更愿意把这道题看成“运行时诚实度”测试:哪个选项最接近你的真实需求,而不是你对未来功能的想象。

部署决策一旦按这个顺序做,很多争论会自动消失。因为你不再是在比较品牌,而是在比较你愿不愿意承担那条能力边界后面的长期成本。

继续读

Cloud stack decisions

从部署选择,到发布检查,再到可复用资源。

这组页面围绕低成本 Cloud 栈和发布边界展开,适合按顺序阅读,也方便从文章直接跳到对应清单。