SaaS Tech Stack 2026 完整决策框架

独立创始人实测的 2026 SaaS 技术栈决策框架,覆盖前端、运行时、数据库、认证、支付、存储和邮件,并附成本数据与决策树。

Huifer
Huifer
June 30, 202612 min read
其他语言:Deutsch · English

本文由 Huifer 撰写,TanStack Ship 的独立开发者与维护者。 自 2023 年起,我在 Cloudflare Workers 上已交付 12+ 个 TanStack 应用,其中三个在处理真实 MRR。本文中所有成本数字与决策规则均来自这些生产环境——包括 2024 年那次从 Vercel 迁移到 Cloudflare 的经历,仅出口流量一项就节省了 3,400 美元/年。本指南是我在第三位创始人发邮件问我"如果你今天重新开始,实际会选什么"之后重写的。

已验证来源:TanStack Start 文档 · Cloudflare Workers 定价 · Cloudflare D1 文档 · Stripe Checkout · Better Auth 最后更新:2026-06-30 · 更新日志


TL;DR: 2026 年构建 SaaS 技术栈需要做七个决策:前端框架、运行时、数据库、认证、支付、存储、邮件/队列。 选错运行时,到第二年出口流量成本会多出 5–10 倍。选错数据库会面临数周的迁移工作。选错认证供应商会需要重新实现。计划规模化运营就选边缘优先方案(Cloudflare Workers + D1 + R2)。如果周末内交付比一切更重要就选 Vercel + Postgres。以下是七层框架、成本表、迁移成本计算器和决策树。


为什么 2026 年技术栈决策是最昂贵的决策

在 2026 年,SaaS 技术栈不只是一组 npm 包。它是一套供应商关系,决定了你的托管账单、冷启动速度、数据驻留、招聘能力和退出成本。

我在 2024 年学到了这一课。我的第一个正式 SaaS 跑在 Next.js + Vercel + Supabase 上。每个客户每月账单 29 美元。到第 14 个月,仅 Vercel 出口流量就达 240 美元/月,Supabase 是 90 美元,仪表板路由的冷启动时间是 1.4 秒。我花了六周迁移到 Cloudflare Workers + D1 + R2。出口流量降到 0。冷启动降到 280ms。托管成本从 330 美元/月降到 19 美元/月。

那次迁移花了六周,因为我把业务逻辑耦合到了 Vercel 专属原语上(Edge Config、Blob、KV)。如果一开始就选择可移植的技术栈,我本可以节省第一年的 3,400 美元托管费,并省下六周的工程时间。

2026 年的技术栈决策是最昂贵的决策,因为它是唯一一个在三年内悄悄累积成本的决策。

"累积成本"在实践中意味着什么

每月 30 美元的出口流量差异在第一个月听起来不算什么。到第 36 个月,就是 1,080 美元的额外托管费。到第 60 个月,是 1,800 美元。累积效应才是让技术栈决策变成 5 年成本而非 5 天决策的原因。

累积成本的三个向量

三个数字在 2026 年会累积:出口流量(随用户内容增长每年翻倍)、数据库存储(随用户增长)、冷启动(在规模化时扼杀转化率)。一个前期便宜但增长昂贵的技术栈,不如一个前期略贵但增长便宜的技术栈——因为后者会在你成功时给你回报。

七层决策框架

2026 年的每个 SaaS 技术栈都有相同的七层。每一层有 2–4 个可行选择。每个选择都有可衡量的取舍。以下框架使用我在评估新项目技术栈时使用的五个维度对每一层评分:

  1. 可移植性 — 我能否不重写就迁出?(1 = 重写,5 = 直接替换)
  2. 10 万 MAU 时的成本 — 每月托管 + 数据库 + 出口流量的美元数字
  3. 冷启动 — 全新 worker/function 的 p99 首字节时间
  4. 类型安全 — 该层是否端到端携带类型?
  5. 锁定程度 — 我的业务逻辑文件中有多少引用了供应商原语?

每个维度对每层打分 1–5。完美层得 25 分。实际层得 14–22 分。总分是各层之和;成本列是下一张账单上真正重要的数字。

为什么是这五个维度而不是其他五个

我选择这些维度是因为它们是那些经受住规模化考验的维度。其他轴(流行度、炒作、生态系统热度)在发布日博客上看起来不错,但不会在第 12 个月的账单上出现。可移植性、成本、冷启动、类型安全和锁定程度是那五个会在一年后的生产仪表板上出现的维度。

第一层 — 前端框架

前端框架是每天都会感受到的那一层。选错会让每个功能的交付都变慢。

框架技术栈匹配类型安全冷启动SSR锁定程度评分 /25
Next.js 15 (App Router)Vercel 优先,可迁移至 Netlify良好(RSC,部分)~250ms✅高(Server Actions, RSC)17
TanStack StartCloudflare Workers、Node、Bun优秀(类型安全的 Router + Server Functions)~80ms✅低(TanStack Router 可移植)22
Remix / React Router v7Node、边缘、serverless良好(loader/action 类型)~180ms✅低19
Astro静态 + 岛屿架构,任意运行时良好(Content Collections)~30ms✅低20
SvelteKitNode、边缘良好~120ms✅低19

Next.js 的优势

生态系统。如果你招聘 React 工程师,他们懂 Next.js。第三方组件库、Stack Overflow 答案、AI 编辑器的训练数据——都偏向 Next.js。

TanStack Start 的优势

类型安全。TanStack Router 的编译时路由验证在构建阶段就能捕获 useParams() 错误。TanStack Start 的 Server Functions 将类型从数据库直接传递到 React 组件,无需手写 DTO 层。如果你曾经因为 loader 返回了错误的数据结构而遇到运行时错误,这类 bug 就会消失。

Remix 和 Astro 的优势

Remix 的优势在于"表单优先"思维模型——如果你的 SaaS 以仪表板为主,Remix 的 action + loader 模式是业界最简洁的方案。Astro 的优势在于内容密集型 SaaS——如果你的产品 60% 是落地页、40% 是应用,Astro 的岛屿模型渲染更快、托管成本比 Next.js 更低。

给独立创始人的诚实建议:重视类型安全与边缘原生部署选 TanStack Start,生态系统与 AI 编辑器成熟度更重要选 Next.js,以内容为主的 SaaS 选 Astro。

第二层 — 运行时

运行时是决定你成本上限的那一层。选错运行时是技术栈中最昂贵的失误。

运行时p99 冷启动每请求成本边缘覆盖锁定程度评分 /25
Cloudflare Workers~50ms0.30 美元/百万请求300+ 个城市低(Workers 是标准 isolate API)23
Vercel Functions~1,400ms0.60 美元/百万 + 出口流量区域有限高(Vercel 专属 API)15
AWS Lambda~200ms(含预留)0.20 美元/百万 + GB-秒30+ 个区域中(Lambda 可移植)18
Fly.io Machines~50ms(预热)0.02 美元/百万 + GB-秒30+ 个区域低(Docker 容器)19
Bun on Fly~30ms0.02 美元/百万30+ 个区域低20

成本差距是标题焦点。以每月 1,000 万请求为例:

  • Cloudflare Workers:5 美元/月(已包含在 5 美元 Workers Paid 计划中)
  • Vercel Functions:40 美元/月 + 出口流量(0.15 美元/GB)
  • AWS Lambda:20 美元/月(跳过 CloudFront 则 API Gateway 无出口费用)
  • Fly.io:30 美元/月(3 个共享 CPU)

Cloudflare 在成本和边缘覆盖上胜出。Vercel 在开发者体验上胜出。诚实的说法:Vercel 的 DX 在 2026 年确实更好。Cloudflare 的成本在规模化时确实更好。 如果你在 10 万 MAU 以下交付,Vercel 的 DX 值得额外成本。如果你在 50 万 MAU 以上运营,Cloudflare 的成本会复利为你带来好处。

第三层 — 数据库

数据库是最难迁移的那一层。选错数据库需要六周重写。

数据库类型边缘延迟多区域供应商锁定10GB 成本评分 /25
Cloudflare D1边缘 SQLite<10ms(读取)是(读取副本)中(D1 API)0 美元(已包含)22
Supabase (Postgres)Postgres30ms+(单区域)是(多区域 beta)中(Supabase JS, RLS)25 美元(Pro)18
Neon (Serverless Postgres)Postgres20ms+(分支)是(读取副本)低(Postgres 线协议兼容)19 美元(Launch)20
Turso(边缘 SQLite)边缘 SQLite<10ms(读取)是(副本)低(libSQL 开源)29 美元(Scaler)22
PlanetScale (MySQL)MySQL(Vitess)25ms+是(水平分片)中(PlanetScale 专属功能)39 美元(Scaler)17

D1 的优势

免费。D1 已包含在 Workers Paid 计划中,大多数 SaaS 应用本来就在用这个计划。10GB 以内,0 美元。边缘读取延迟是本列表中最低的。

D1 的代价

写入延迟。D1 是复制版 SQLite;写入主节点然后从副本读取,最坏情况下需要约 80ms。如果你的 SaaS 写入密集(实时聊天、协作编辑),D1 是错误选择。

Supabase、Turso 和 Neon 的优势

Supabase 在 Postgres 功能上胜出——pgvector、全文搜索、数据库级 RLS、存储过程。Turso 在可移植性上胜出,因为 libSQL 是开源的且可自托管。Neon 在分支功能上胜出——每个 PR 在 2 秒内获得一个隔离的数据库副本。

诚实建议:数据在 10GB 以内且读多写少选 D1,需要 Postgres 功能选 Supabase,可移植性是第一约束选 Turso,每天 10 个 PR 且需要隔离预览选 Neon。

第四层 — 认证

供应商类型边缘原生1 万 MAU 成本锁定程度评分 /25
Better Auth开源(自托管)✅ 是0 美元(在 D1 上托管)无(代码属于你)23
ClerkSaaS✅ 是(通过中间件)25 美元(Pro)中(Clerk 组件)19
Auth0SaaS⚠️ 部分35 美元(Essentials)高(Auth0 专属 API)14
NextAuth / Auth.js开源⚠️ 仅 Node0 美元低17
Supabase AuthSaaS✅ 是0–25 美元(Pro)中(仅 Supabase)18

Clerk 的优势:预建组件。<SignIn />、<UserButton />、<OrganizationSwitcher /> 节省三周时间。如果你的 SaaS 是 B2B 且第一周就需要组织/团队管理功能,Clerk 是正确选择。

Better Auth 的优势:所有权。Better Auth 采用 MIT 许可,在你的代码库中运行。没有按 MAU 计费,没有供应商依赖,没有 Clerk 风格的抽象泄漏到你的业务逻辑中。如果你在 5 万 MAU 以上运营,数学就会翻转:Better Auth 是 0 美元,Clerk 是每月 25 美元以上。

NextAuth/Auth.js 的优势:Next.js 原生。如果你为第一层选择了 Next.js,NextAuth 是最低摩擦的选择。

Supabase Auth 的优势:与数据库捆绑。如果你为第三层选择了 Supabase,Supabase Auth 少一个供应商要管理。

诚实建议:边缘原生且成本敏感选 Better Auth,第一周就需要 B2B 组织/团队功能选 Clerk,数据库选 Supabase 则选 Supabase Auth。

第五层 — 支付

2026 年的默认选择是 Stripe。真正的决策是集成模式,而非供应商。

集成方式SSR 友好Webhook 复杂度类型安全评分 /25
Stripe Checkout(托管)✅ 是低(一个 webhook)良好(TS SDK)22
Stripe Elements(嵌入式)✅ 是中(多个 webhook)良好19
Stripe Payment Intents(自建)✅ 是高(完整 PCI 范围)良好14
Paddle / LemonSqueezy(MoR)✅ 是低有限18

95% 的 SaaS 产品应选 Stripe Checkout(托管)。集成方式是跳转到 Stripe 托管页面、回程时一个 webhook,以及 customer.subscription.created 事件处理器。TypeScript SDK 类型安全,文档是业界最佳,用户信任 Stripe 域名因此转化率高于 Elements。

我在五个 SaaS 产品中集成了 Stripe。每次的教训都相同:从 Checkout 开始,只有 A/B 测试证明 Elements 对你的特定用户群体转化率确实更高时才迁移过去。

第六层 — 存储

存储出口成本100GB 成本锁定程度评分 /25
Cloudflare R20 美元1.50 美元(仅存储)低(S3 兼容 API)24
AWS S30.09 美元/GB1.50 美元存储 + 9 美元出口低(S3 API 是事实标准)21
Vercel Blob0.15 美元/GB0.20 美元(Pro)+ 出口流量高(仅 Vercel)14
Backblaze B20.01 美元/GB0.50 美元存储 + 1 美元出口低(S3 兼容)22

R2 是 2026 年存储决策的焦点。 零出口流量是一个真实的产品特性。每月提供 1 TB 图片的 SaaS 用 Vercel Blob 需付 150 美元,用 R2 只需 0 美元。如果你的 SaaS 图片密集(电商、作品集、用户生成内容),这是 4 倍的成本削减。

S3 是安全的默认选择。 如果你已在 AWS 上标准化,S3 的锁定程度在云供应商选项中最低,因为每个其他云都支持 S3 API。

Vercel Blob 是陷阱。 看起来便宜(Pro 套餐 0.20 美元/月),直到出口流量账单到来。

第七层 — 邮件 + 队列

层供应商10 万封邮件/月成本锁定程度评分 /25
邮件Resend20 美元(Pro)低22
邮件AWS SES1 美元(按量付费)低21
队列Cloudflare Queues0.40 美元/百万(Workers Paid)低22
队列Inngest0 美元(免费套餐)中20
队列BullMQ(Fly 自托管)5 美元(Fly)无19

Resend 是 2026 年事务邮件的默认选择。DX 出色,React Email 集成是业界最佳,10 万封邮件每月 20 美元价格合理。

AWS SES 是成本领导者。10 万封邮件每月 1 美元。如果你有 AWS 专业知识,SES 是正确选择。

Cloudflare Queues 是 Workers 上异步工作的新默认选择。每百万次操作 0.40 美元,对 99% 的 SaaS 来说成本可忽略不计。

综合推荐 — 2026 年推荐技术栈

独立创始人构建 B2C 或 pro-sumer SaaS 的推荐技术栈:

text
前端:       TanStack Start        (类型安全、边缘原生、AI 友好)
运行时:     Cloudflare Workers    (300+ 城市、<50ms 冷启动、5 美元/月)
数据库:     Cloudflare D1         (边缘 SQLite、10GB 以内 0 美元)
认证:       Better Auth           (自托管、0 美元、MIT 许可)
支付:       Stripe Checkout       (托管、仅 webhook、类型安全 SDK)
存储:       Cloudflare R2         (零出口流量、S3 兼容 API)
邮件:       Resend                (React Email、10 万封 20 美元/月)
队列:       Cloudflare Queues     (内置、0.40 美元/百万)

这就是驱动 TanStack Ship 的技术栈。每个模块都在是因为它在生产环境里崩过,我修好了它。每个被移除的模块曾经是入门包里的纸上需求,但在实践中带来了问题。

每月 10 万请求、1 万活跃用户的 SaaS 成本:

text
Workers Paid 套餐:      5 美元/月
D1(10GB 以内):        0 美元
R2(100GB 以内):       0 美元
Better Auth:             0 美元(自托管)
Stripe:                  每笔交易 2.9% + 0.30 美元
Resend:                  20 美元/月(Pro 套餐)
Cloudflare Queues:       0.40 美元/月
────────────────────────────────
基础设施总计:             ~26 美元/月

同规模下 Vercel + Supabase + Vercel Blob 的等效技术栈约 95 美元/月。100 万 MAU 时差距扩大至 Vercel 约 400 美元/月 vs Cloudflare 约 45 美元/月。

决策树 — 按创始人画像选择

"应该选哪个技术栈"的答案取决于三个创始人特定约束:交付窗口、第 12 个月目标 MAU、团队熟悉度。使用此决策树:

text
如果交付窗口 < 14 天且有 Next.js 经验
→ Vercel + Supabase + NextAuth

如果运营或计划运营 >10 万 MAU 且在意成本
→ Cloudflare Workers + D1

如果第一周就需要 B2B 组织/团队功能且有预算
→ Clerk + Vercel

如果需要 Postgres 功能(pgvector、RLS、全文搜索)
且读多写少 → Supabase

如果每天 10+ 个 PR 且需要隔离的数据库分支
→ Neon + Cloudflare Workers

如果需要端到端类型安全且边缘原生部署
→ TanStack Start + Cloudflare

如果需要水平分片且表将超过 1 亿行
→ PlanetScale

如果有 AWS 专业知识且想最低邮件成本
→ AWS SES + Lambda

决策树未覆盖的边缘情况

"我只有 14 天交付"的创始人。 选 Vercel + Supabase + NextAuth。组合 DX 是业界最快的。成本差距在 5,000 MAU 以下真实但很小。

"我 18 个月内将达到 5 万 MAU"的创始人。 选 Cloudflare Workers + D1 + Better Auth。你避免的迁移成本会与省下的成本一起复利。

"在企业客户内部渲染的 B2B SaaS"创始人。 选 Cloudflare Workers。运行时部署在靠近客户 POP 的位置。单区域 Postgres 无法通过《财富》500 强客户采购审查。

"现有 Next.js 代码库已达 5 万 MAU"的创始人。 留在 Vercel 直到成本差距超过迁移成本。盈亏平衡点约在 20 万 MAU。

迁移成本计算器

如果你目前在 Vercel 上且正在考虑迁移到 Cloudflare,以下是我使用的粗略成本模型:

text
迁移项目:            4–6 周独立开发时间
代码改动:
  - Vercel Edge Config    → Cloudflare KV(1–2 天)
  - Vercel Blob          → R2(1 天,S3 兼容)
  - Vercel Postgres      → D1(1–2 周,schema 重写)
  - Vercel Functions     → Workers(2–3 周,API 重写)
  - NextAuth             → Better Auth(2–3 天)
  - Vercel Analytics     → 自托管(1–2 天)
总迁移时间:            5–7 周

10 万 MAU 第一年节省: 约 1,000 美元
50 万 MAU 第一年节省: 约 4,800 美元
100 万 MAU 第一年节省: 约 12,000 美元

盈亏平衡: 独立开发者 6–9 个月,团队更快

如果迁移速度快于预估节省,留在原地。如果节省速度快于迁移,在达到 MAU 阈值前迁移。我犯的错误是在成本已经开始伤害之后才迁移——六周的痛苦本来换一个不同的起始技术栈就能避免。

TanStack Ship 提供什么(和不提供什么)

TanStack Ship 是上述技术栈的预接线版本。你获得:

  • TanStack Start + Cloudflare Workers,10 分钟内部署
  • 带多租户 tenant_id 模式的 D1 schema
  • 接入 D1 的 Better Auth
  • Stripe Checkout + webhook + 客户门户
  • R2 管理文件浏览器
  • Resend 事务邮件 + React Email 模板
  • Cloudflare Queues 异步任务处理
  • 14 个生产模块:UTM 归因、MRR 仪表板、博客 CMS、推荐系统、邮件营销、管理面板、文件管理器、i18n(en/zh/de)、MCP 服务器卡片、AI 编辑器 Skills
  • 在 CI 中经过漂移测试的版本化 agent Skills

你不会获得:Vercel 部署按钮(设计上仅支持 Cloudflare)、Next.js 兼容性(TanStack Router 是路由模型),或 ShipFast 规模的社区(更小、在增长、偏向边缘优先的创始人)。

诚实建议:TanStack Ship 只在上述推荐技术栈匹配你的约束时才正确。如果你需要 Vercel 的 DX、更大的社区,或 TanStack 以外的框架,它就是错误选择。

结语

2026 年没有单一"最佳"SaaS 技术栈——只有最适合你的交付窗口、目标 MAU、成本承受力和团队熟悉度的技术栈。上述七层是框架。成本表是预算现实。决策树是候选清单。

交付速度压倒一切选 Vercel + Supabase + NextAuth。成本和边缘覆盖是约束选 Cloudflare Workers + D1 + Better Auth。类型安全是功能而非优点选 TanStack Start + Cloudflare。需要推荐技术栈预接线且第六个月需要的模块已构建并经过生产测试选 TanStack Ship。

决策权在你。无论怎么选,成本都会复利。

下一步: 在 TanStack Ship vs ShipFast 查看与 ShipFast 的正面比较,在 TanStack Ship vs Makerkit 查看与 Makerkit 的正面比较,或浏览完整比较中心。完整模块分解见定价页;功能概述展示入门包中包含的内容。