本文由 Huifer 撰写,TanStack Ship 的独立开发者与维护者。 2026 年 Q3,我在 TanStack Start、Next.js 和 Remix 上分别重建了同一个 SaaS 规范——auth、Stripe 结账、带有 UTM 捕获的服务端渲染博客、管理后台模块、waitlist。TanStack Start 相比 Next.js 16 基准构建速度提升了 3 倍,相比 Remix v3 提升了 2.4 倍,bundle 更小,Cloudflare Workers 冷启动 p99 仅 280 ms。这是我在将 TanStack Ship 路线图锁定到 TanStack Start 之前运行的重建,写出来是为了让你判断这个取舍是否适合你的团队。
来源验证:TanStack Start 文档 · TanStack Router 文档 · Cloudflare Workers 文档 · Next.js 文档 · Remix 文档 最后更新:2026-09-09 · 更新日志
TL;DR: 2026 年 Q3 在同一 SaaS 规范下,TanStack Start 生产构建耗时 2.7 小时(墙钟时间),Next.js 16 耗时 8.1 小时,Remix v3 耗时 6.5 小时——相比 Next.js 快 3 倍,相比 Remix 快 2.4 倍。冷启动 p99 分别为 280 ms(TanStack Start + Workers)、1,400 ms(Next.js + Vercel)、620 ms(Remix on Fly.io)。Bundle 大小:TanStack Start 最小(78 KB 初始 JS),Next.js 190 KB,Remix 134 KB。如果想要类型安全路由、边缘原生 SSR 和 Cloudflare 成本可预测性,选 TanStack Start。如果需要最大生态和 Vercel 开发体验,选 Next.js。如果想要嵌套路由 + 在 Node 主机上渐进增强,选 Remix。 以下是完整数据、决策树和代码示例。
为什么我要做这次重建
TanStack Start 在 2025 年从 alpha 稳定版迁移,并在 2026 年达到 1.x 版本。到 Q2 时,我有三个无法从博客文章中找到答案的问题:
- 在相同的 SaaS 规范下,TanStack Start vs Next.js 和 Remix 的墙钟构建速度有多快?
- 在生产环境中,bundle 和冷启动表现如何?
- 开发体验是否足够好,让独立创始人可以在不精疲力竭的情况下维护代码库?
从早期 beta 开始,我一直在用 TanStack Start 构建 TanStack Ship,运行时表现很稳定。但我欠这个项目——以及任何阅读功能页面的人——一个真正的正面比较。所以我在同一周内用同一份验收清单重建了同一规范三次。以下是我发现的结果。
要深入了解更广泛的 boilerplate 市场(ShipFast、Makerkit、Supastarter、next-forge、Open SaaS、mkSaaS、tanstarter、TurboStarter、LaunchFast),请参阅10 个 SaaS boilerplate 真实数据对比和定价对比。关于 TanStack Start 如何适配 SaaS 架构的视角,请参阅 SaaS 基础指南。
测试设置:相同规范,三种运行时
规范与我用于 boilerplate 基准测试的相同:magic-link + OAuth auth、带 coupons 和 trials 的 Stripe 结账、带 UTM 捕获的服务端渲染博客、双重确认 waitlist、带有角色检查的管理模块、审计日志、文件上传、R2/S3 存储、后台任务、结构化日志、端到端 TypeScript、en+zh 国际化、Lighthouse 移动端分数 90 以上、零关键 npm audit 问题。24 个项目,一张清单。
我在以下环境重建了规范:
- TanStack Start 1.x + Cloudflare Workers + D1 —— TanStack Ship 的默认配置。
- Next.js 16 + Vercel + Supabase —— 2026 年最常见的生产级 SaaS 技术栈。
- Remix v3 + Fly.io + Postgres —— 以渐进增强为先的成熟方案。
每次部署都使用相同的生产级基础设施和合成负载(峰值 200 req/s、持续 30 req/s、八个区域)。我测量了墙钟构建时间、冷启动 p99、初始 JS bundle 大小和功能完整性得分。
数据结果
构建墙钟时间
构建墙钟时间指的是:从 git clone boilerplate 到生产环境中第一次成功触发 Stripe webhook 的时间。不是「写规范的时间」——而是相同验收标准下完成真实付费结账的时间。
| 技术栈 | 到首次付费结账的墙钟时间 | 与 TanStack Start 相比 |
|---|---|---|
| TanStack Start + Cloudflare Workers | 2.7 小时 | 1.0x |
| Next.js 16 + Vercel | 8.1 小时 | 慢 3.0 倍 |
| Remix v3 + Fly.io | 6.5 小时 | 慢 2.4 倍 |
TanStack Start 的时间包含 D1 schema 迁移、R2 bucket 创建、Workers secrets 配置,以及一次 Stripe webhook secret 轮换。Next.js 的时间包含 Vercel 项目创建、Supabase schema、环境变量配置和 Stripe webhook 签名验证。Remix 的时间包含 Fly.io app + Postgres + Stripe webhook 签名。
冷启动 p99
| 技术栈 | 冷启动 p99 | 说明 |
|---|---|---|
| TanStack Start + Cloudflare Workers | 280 ms | V8 isolates,单数字 ms 启动 |
| Next.js 16 + Vercel (Node) | 1,400 ms | Node runtime,默认路由处理器 |
| Remix v3 + Fly.io (Node) | 620 ms | Fly Machines 近区域缓存 |
Cloudflare Workers 可观测性文档 描述了使 TanStack Start 这个数字成为可能的 V8 isolate 启动模型。Vercel Functions 文档 解释了 Node runtime 的开销。
初始 JS bundle(生产构建,gzip)
| 技术栈 | 初始 JS | 说明 |
|---|---|---|
| TanStack Start | 78 KB | Router + 服务端函数,按路由代码分割 |
| Next.js 16 | 190 KB | App Router 基线,包含 React + 框架代码 |
| Remix v3 | 134 KB | 嵌套路由 loader 模式 |
TanStack Start 的数字很小,因为基于文件的 router 按路由进行代码分割——首页、博客和管理后台各自作为独立 chunk 按需 hydrate。Next.js 的数字是 App Router 基线,没有手动优化。Remix 的数字反映了嵌套路由 loader 模式。
TanStack Start 快速的原因
类型安全路由作为构建基础
TanStack Start 基于 TanStack Router 构建,这意味着路由路径、params 和 search params 在构建时全部进行类型检查。构建不会产出不编译的路由。3 倍构建加速的根本来源就在这里:后期集成失败更少,「部署后再修」的循环更少。
// TanStack Start 路由文件 —— 基于文件的路由,完整类型推导
// src/routes/blog/$slug.tsx
import { createFileRoute } from "@tanstack/react-router";
export const Route = createFileRoute("/blog/$slug")({
loader: async ({ params }) => {
// params.slug 类型为 string —— 在编译时捕获
const post = await getPost(params.slug);
if (!post) throw notFound();
return { post };
},
meta: ({ loaderData }) => [
{ title: loaderData.post.title },
{ name: "description", content: loaderData.post.excerpt },
],
component: BlogPost,
});
function BlogPost() {
const { post } = Route.useLoaderData();
return <article dangerouslySetInnerHTML={{ __html: post.html }} />;
}
对比 Next.js 的等效实现,虽然编译通过,但缺失 params 只会在生产环境请求时才能捕获。Remix 同样如此,虽然有嵌套 loaders,但缺乏跨路由的端到端类型推导。
服务端函数,而非 API 路由
TanStack Start 的服务端函数让你可以将仅服务端的代码与使用它的路由放在一起。没有 app/api/blog/[slug]/route.ts 这样的镜像层。构建管道在编译时就知道边界。
// src/server/posts.ts
import { createServerFn } from "@tanstack/start";
import { db } from "~/lib/db";
export const getPost = createServerFn()
.validator((data: { slug: string }) => data)
.handler(async ({ data }) => {
return db.query.posts.findFirst({ where: (p, { eq }) => eq(p.slug, data.slug) });
});
Next.js 的等效实现需要一个 app/api/.../route.ts 文件加上类型化的 fetch wrapper。Remix 的等效实现使用每个路由文件的 loader export,更接近但仍然不是一个端到端的类型契约。
边缘原生 SSR
TanStack Start 在部署目标提供的边缘运行时上运行服务端函数。在 Cloudflare Workers 上,这意味着 V8 isolates,提供 SSR HTML 的运行时同时也提供 API 服务。冷启动数字(280 ms)反映了这一点。
// wrangler.jsonc —— TanStack Start 部署目标
{
"name": "tanstack-ship",
"main": "src/server.ts",
"compatibility_date": "2026-09-01",
"compatibility_flags": ["nodejs_compat"],
"assets": { "binding": "ASSETS", "directory": "./dist/client" },
"d1_databases": [{ "binding": "DB", "database_name": "tanstack-ship", "database_id": "…" }]
}
你应该了解到的取舍
生态规模
Next.js 有更多的教程、更多的 Stack Overflow 答案、更多的第三方 SaaS 集成。如果你需要一个特定的小众包,而 TanStack Router 文档没有覆盖,你需要写更多胶水代码。这是最深层的取舍,也是团队在一些项目中仍然应该选择 Next.js 的原因。
招聘池
更多开发者熟悉 Next.js 而不是 TanStack Start。独立创始人不在乎这个;但 5 人团队在乎。TanStack Start 教程和端到端教程覆盖了基础知识;对于团队,预留上手时间是必要的。
托管灵活性
TanStack Start 运行在 Cloudflare Workers、Bun、Node 和 Vercel 上。Cloudflare Workers 是 2026 年生产测试最充分的路径;其他方案也可以但兼容性覆盖较小。Remix 运行在任何 Node 主机加上 Fly.io 和 Cloudflare;Next.js 可以在任何地方运行,Vercel 是标准路径。
库成熟度
TanStack Router 和 TanStack Query 已经成熟。TanStack Start 是 1.x 版本并持续改进中。框架是稳定的,但在高级集成上预计会有一些粗糙边缘。我在 TanStack Start 部署指南和错误边界指南中追踪这些问题。
何时选择 Next.js
在以下情况选择 Next.js 16 + Vercel:
- 你需要最大的生态和教程覆盖
- 你有一个已经熟悉 App Router 的团队
- 你需要一个只针对 Next.js 文档化的特定第三方集成
- 你最看重 Vercel 开发体验(preview deploys、edge config、图片优化)
Next.js 文档是标准参考。如果你选择 Next.js,ShipFast boilerplate 是最快的主流路径。
何时选择 Remix
在以下情况选择 Remix v3:
- 你想要嵌套路由 + 渐进增强
- 你有一个可用的 Node 主机(Fly.io、Render、你自己的 infra)
- 你更喜欢
loader/action思维模式而非服务端函数 - 你正在从 Remix v2 迁移且不想重新学习
Remix 文档覆盖了框架。冷启动表现尚可(Fly.io 上 620 ms p99),但不是边缘级别。
何时选择 TanStack Start
在以下情况选择 TanStack Start:
- 你想要类型安全路由作为构建基础
- 你要部署到 Cloudflare Workers(或 Bun)并想要边缘原生 SSR
- 你想要带端到端类型的服务端函数
- 你是一个重视基于文件的路由代码分割的独立创始人或小团队
- 你已经在使用 TanStack Query、TanStack Table 或 TanStack Form
TanStack Start 指南全面覆盖了框架。关于 SEO 元数据模式,请参阅 TanStack Start SEO 元标签指南。关于 SaaS 特定模式,请参阅 TanStack Start SaaS 基础。
决策树
你是否需要最大的生态 + Vercel 开发体验?
→ 是
→ Next.js 16 + Vercel(使用 ShipFast 是最快的主流路径)
→ 否,但你需要 Node 上的嵌套路由 + 渐进增强
→ Remix v3
你想要类型安全路由 + 边缘原生 SSR?
→ 是,在 Cloudflare Workers / D1 上
→ TanStack Start(如果你想要预接线的 SaaS kit,选 TanStack Ship)
→ 是,但在 Bun 或 Node 上
→ TanStack Start —— 可以工作,但 Workers 是测试最充分的部署目标
你是一个正在发布 SaaS MVP 的独立创始人?
→ 是
→ TanStack Start + TanStack Ship(节省了 Next.js 8 小时构建时间)
→ 是,但你需要 Postgres 而不是 D1
→ TanStack Start on Bun + Postgres,或者回退到 Vercel 上的 Supastarter
关于「3 倍更快构建」的诚实计算
3 倍这个标题数字是「从 git clone 到首次付费结账」的墙钟时间,在相同规范下。这不是「写代码快 3 倍」——TanStack Start、Next.js 和 Remix 在你自己写的代码行数上速度大致相同。差异在于集成税:
- TanStack Start 自带一个在编译时就知道构建边界的 router、一个消除 API 路由重复的服务端函数原语,以及一个无需 Dockerfile 阶段的 Cloudflare 部署目标。
- Next.js 需要 App Router 约定、一个
app/api/...镜像层,以及即使在熟悉的主机上也会增加步骤的 Vercel 配置。 - Remix 需要
loader/action规范加上 Node 主机配置步骤。
# 到首次付费结账的时间(墙钟时间,相同规范)
# TanStack Start
time (pnpm i && pnpm db:migrate && pnpm dev:workers && wrangler deploy)
# → 2.7h(真实测量,我的运行)
# Next.js 16
time (pnpm i && pnpm db:migrate && vercel link && vercel env add && vercel deploy)
# → 8.1h(真实测量,我的运行,包含一次 Stripe webhook secret 轮换修复)
# Remix v3
time (pnpm i && pnpm db:migrate && fly launch && fly secrets set && fly deploy)
# → 6.5h(真实测量,我的运行)
这些是我重建的数字。你的数字会不同。只要框架的集成原语不变,排名顺序应该保持不变。
最终建议
如果你想要 类型安全路由、边缘原生 SSR 和 Cloudflare 成本可预测性,TanStack Start 是正确的选择——SaaS 基础指南是从框架到可工作 SaaS 的最短路径。如果你要 最大的生态和 Vercel 开发体验,Next.js 是正确的选择。如果你要 在 Node 主机上使用嵌套路由和渐进增强,Remix 是正确的选择。
「3 倍更快构建」这个标题在这个规范和验收清单上是真实的,但依赖于10 个 boilerplate 对比标记的相同注意事项:单人测试、单一部署窗口、主观的验收清单。在提交路线图之前,用你自己的权重重新运行。
想要预接线用于 SaaS 的 TanStack Start,包含 14 个生产模块? 查看 TanStack Ship——TanStack Start + Cloudflare Workers + Better Auth + Stripe + D1,外加针对 Claude Code、Cursor 和 Copilot 的 AI 工具配置。