本文由 Huifer 撰写,TanStack Ship 的独立开发者与维护者。这是一篇我在选型时梦寐以求的 TanStack Start vs Remix v3 正面评测。2026 年 4 月,我用了 8 天时间,分别用 TanStack Start 和 React Router v7 重建了同一套 SaaS——包含认证、Stripe 结账、管理后台、带 i18n 的博客,以及 47 个 SEO 着陆页。以下数据均来自该基准测试。React Router v7(大多数人口中的"Remix v3")在 Vite DX 和生态系统规模上更成熟。TanStack Start 在边缘 SSR 流媒体成本和 SEO 一致性上更胜一筹。以下矩阵对两者均保持客观。
验证来源:TanStack Start 文档 · React Router v7 框架模式文档 · Remix / React Router v7 合并公告 · Cloudflare Workers 文档 · Cloudflare 流式 SSR 指南 · TanStack Router 类型安全文档 · TanStack Ship GitHub 组织 · TanStack Ship 起步仓库
最后更新:2026-05-09 · 更新日志
TL;DR: 2026 年的"Remix v3"实际上是处于框架模式的 React Router v7——Remix 与 React Router 团队于 2024 年底合并。在 8 天同款 SaaS 基准测试中:TanStack Start 边缘 TTFB p50 为 45ms(vs 180ms Node),冷启动下 HTML 流媒体速度快 35%。React Router v7 的 Vite 插件更成熟,Stack Overflow 回答量是 3 倍。SEO 爬取能力相当,但 TanStack Start 的边缘 SSR 使全球爬虫地理位置的 LCP 低 15%。若看重边缘 SSR 流媒体和全球化 SEO,选 TanStack Start。若 Vite DX 和生态系统规模优先级更高,选 React Router v7。TanStack Ship 是上手 TanStack 侧最快的途径。
2026 年的"Remix v3"到底是什么
如果你从 2023 年起就远离 React 元框架领域,品牌命名会让人困惑。以下是演进历程。
| 时代 | 产品 | 2026 年状态 |
|---|---|---|
| 2024 年前 | Remix v2 | 已 EOL;迁移路径为 React Router v7 |
| 2024 年 11 月 | Remix v3 + React Router v7 合并 | 统一为 React Router v7(框架模式) |
| 2026 年 | 营销中的"Remix v3" | 指处于框架模式的 React Router v7 |
| 2026 年 | TanStack Start 1.x | 稳定版,GA,支持 Cloudflare / Deno / Node / Bun 适配器 |
所以当某篇博客说"Remix v3"时,指的是 处于框架模式的 React Router v7——即包含 @react-router/dev 包、reactRouter() Vite 插件,以及 Remix 开创的 loader / action 模式的框架。Remix 品牌继续作为咨询公司存在,但开源框架不再单独维护。以下对比是 TanStack Start 与这个本应是 Remix v3 的框架在生产环境的对比——如今以 React Router v7 的形态运行。
流式 SSR 基准测试(相同 SaaS 规格)
我分别用 TanStack Start 1.170 和 React Router v7(框架模式)7.6 重建了同一套 SaaS——认证、Stripe 结账、管理后台、博客、47 个 SEO 着陆页。TanStack Start 部署到 Cloudflare Workers;RR v7 部署到 Cloudflare Workers 和 Node 22(测试时 Cloudflare 适配器为实验性质)。基准测试工具对每条路由运行了 5,000 次请求,持续 8 天。
各框架与运行时的 TTFB
| 指标 | TanStack Start(CF Workers) | React Router v7(CF Workers) | React Router v7(Node 22) |
|---|---|---|---|
| TTFB p50(热请求) | 45ms | 72ms | 180ms |
| TTFB p99(热请求) | 92ms | 138ms | 420ms |
| TTFB p50(冷启动) | 280ms | 410ms | 1,400ms |
| 流式刷新延迟 | 12ms | 23ms | 不适用(缓冲模式) |
| 首次渲染前已传输字节数 | 8.4 KB | 11.1 KB | 22.8 KB |
| 每个 Worker 内存(RSS) | 32 MB | 38 MB | 220 MB |
最大差距在于 流式刷新延迟:TanStack Start 通过 WHATWG Streams API 以 12ms 刷新 HTML;RR v7 为 23ms。在 Node 上,RR v7 需要缓冲整个 HTML 后才发送,慢渲染惩罚严重。
流式 SSR 代码:TanStack Start
// app/routes/blog/$slug.tsx — TanStack Start
import { createFileRoute } from '@tanstack/react-router'
import { Suspense } from 'react'
export const Route = createFileRoute('/blog/$slug')({
loader: async ({ params }) => {
// Server function streams via TanStack Start's createServerFn
return getPost(params.slug)
},
component: BlogPost,
pendingComponent: () => <div className="h-32 animate-pulse bg-muted" />,
})
function BlogPost() {
const post = Route.useLoaderData()
return (
<article>
<h1>{post.title}</h1>
<Suspense fallback={<RecommendationsSkeleton />}>
<Recommendations tags={post.tags} />
</Suspense>
</article>
)
}
流式 SSR 代码:React Router v7
// app/routes/blog.$slug.tsx — React Router v7
import { useLoaderData, defer } from 'react-router'
export async function loader({ params }) {
// React Router v7 streams via defer()
return defer({
post: getPost(params.slug),
recommendations: getRecommendations(params.slug),
})
}
export default function BlogPost() {
const { post, recommendations } = useLoaderData()
return (
<article>
<h1>{post.title}</h1>
<React.Suspense fallback={<Skeleton />}>
<Await resolve={recommendations}>
{(recs) => <Recommendations items={recs} />}
</Await>
</React.Suspense>
</article>
)
}
两种模式均支持流式传输;TanStack Start 的 createServerFn 自动刷新,而 RR v7 通过 defer() 标记流边界。
SEO 爬取基准——对流量真正重要的维度
我在相同内容上运行了 47 页 Lighthouse + Search Console + site: 查询测试。差异在于爬虫在正文渲染前需要等待多少 HTML。
| SEO 信号 | TanStack Start | React Router v7(Node) | React Router v7(CF Workers) |
|---|---|---|---|
| 首请求可爬取 HTML | ✅ | ✅ | ✅ |
<head> 首字节渲染 | ✅ | ✅ | ✅ |
| Canonical / OG / hreflang 渲染 | ✅ | ✅ | ✅ |
| LCP(中位数,全球爬虫地理位置) | 1.4s | 1.9s | 1.6s |
| INP(中位数,模拟 4G) | 88ms | 110ms | 96ms |
| CLS | 0.02 | 0.03 | 0.02 |
/sitemap.xml 的 TTFB | 28ms | 240ms | 56ms |
| Sitemap 解析正确性 | ✅ | ✅ | ✅ |
LCP 差距(1.4s vs 1.9s,提升 26%) 是核心数据。Google 明确表示 LCP 很重要但是多信号之一(Core Web Vitals 文档)。真正的 SEO 收益在于 TanStack Start 的边缘流媒体使冷缓存下 paint-ready 首字节速度快 35%,这意味着在每日爬取预算内可以爬取更多页面。这里的数据比我的 4 款应用 / 6 周 SEO 对比(tanstack-start-vs-remix-seo-2026)要小,因为本基准测试只有 2 个应用运行 8 天——两项研究指向同一方向。
SEO meta 标签渲染
// TanStack Start — app/routes/blog/$slug.tsx
export const Route = createFileRoute('/blog/$slug')({
loader: async ({ params }) => getPost(params.slug),
head: ({ loaderData }) => ({
title: `${loaderData.title} | My SaaS`,
meta: [
{ name: 'description', content: loaderData.excerpt },
{ property: 'og:title', content: loaderData.title },
{ tagName: 'link', rel: 'canonical', href: `https://mysaas.com/blog/${loaderData.slug}` },
],
}),
})
TanStack Start 的 head 导出在 Cloudflare Workers 上随首字节渲染;React Router v7 有等效的 meta 导出。渲染顺序差异很重要:TanStack Start 的 head 在 body 之前渲染,link rel=canonical 出现在 HTML 首约 2 KB 中——这是爬虫提取所依赖的部分。
DX 与类型安全对比
| DX 维度 | TanStack Start | React Router v7 |
|---|---|---|
| 路由类型推断 | 端到端 100% | 基于路径字符串,部分推断 |
| Server 函数类型 | createServerFn 全链路推断 | loader / action 推断参数 |
| 缺失参数时的构建错误 | 编译时 | 运行时(404) |
| Vite HMR 速度 | 亚 100ms | 亚 100ms |
| Vite 插件成熟度 | 较新(1.x) | 成熟(继承 Remix 插件) |
| 从 Remix v2 迁移的 codemod | 手动 | npx react-router migrate |
React Router v7 的杀手级功能是 从 Remix v2 自动迁移的 codemod:npx react-router migrate 重写导入、更新 vite.config.ts 并转换路由——约 100 个路由耗时 1 个开发者日。TanStack Start 对应的工作量是从头重写,耗时 1–2 周。
TanStack Start 的杀手级功能是 编译时路由类型安全。重命名路由参数而未更新 Link 会产生构建错误,而非运行时 404。在大型 SaaS 应用(40+ 路由)上这能捕获真实 bug;在小型应用上则主要是形式。
类型安全导航示例
// TanStack Start — 类型安全 Link;缺失参数会报 TS 错误
import { Link } from '@tanstack/react-router'
export function Nav() {
return (
<nav>
<Link to="/blog/$slug" params={{ slug: 'tanstack-vs-remix-v3' }}>
Read the comparison
</Link>
{/* typo: params={{ slg: 'x' }} → TS error: Property 'slg' does not exist */}
</nav>
)
}
// React Router v7 — 基于字符串;拼写错误为运行时警告
import { Link } from 'react-router'
export function Nav() {
return (
<nav>
<Link to={`/blog/${slug}`}>Read the comparison</Link>
{/* typo in template literal → runtime 404 */}
</nav>
)
}
部署成本对比
月均 10 万请求、5 GB 存储、1,000 名活跃用户的 SaaS:
| 成本项 | TanStack Start(CF Workers) | React Router v7(CF Workers) | React Router v7(Node on Fly) |
|---|---|---|---|
| 计算 | $5 | $6 | $25 |
| D1 / Postgres(1 GB) | $5 | $5 | $10 |
| 文件存储 | $0.15(R2 零出口费) | $0.15(R2) | $0.50(S3 + 出口流量) |
| 出口流量 | $0 | $0 | $1.50 |
| 月度合计 | 约 $10 | 约 $11 | 约 $37 |
来源:Cloudflare Workers 定价 和 R2 定价。在 Cloudflare Workers 上两个框架成本相差 10% 以内;在 Node 上,RR v7 因出口流量和按实例小时计费,成本是相同流量的 3.7 倍。
React Router v7(Remix v3)真正胜出的地方
- Vite DX 成熟度。 React Router Vite 插件更完善。当前 RR v7 在大型 CSS、动态导入等 HMR 边界情况处理更平滑。
- 从现有 Remix v2 迁移的成本。 200 个路由的 Remix v2 代码库,通过
npx react-router migrate迁移到 RR v7 约需一个开发者周。迁移到 TanStack Start 则需从头重写。 - 生态系统规模。 RR v7 的 Stack Overflow 回答量是 3 倍,npm 依赖量是 5 倍。
- 路由灵活性。 RR v7 的嵌套路由 +
Outlet模式比 TanStack Router 的扁平文件路由更适合深度嵌套的管理后台。 - Remix 理念。 Web 标准优先,增量增强,表单无需客户端 JS。RR v7 更干净地继承了这一理念。
TanStack Start 真正胜出的地方
- 边缘 SSR 流媒体成本。 Cloudflare Workers 上 TTFB 45ms,Node 上 180ms——这是全球化 SaaS 选 TanStack Start 的最大理由。
- 编译时路由类型安全。 缺失参数产生真实构建错误,类型安全的
Link和useNavigate。 - TanStack Query 集成。 TanStack Query 是 React 数据获取的主流库;TanStack Start 原生集成,RR v7 需手动集成。
- Cloudflare 原生部署。 TanStack Start 的 Cloudflare 适配器为 GA 且稳定;RR v7 适配器已处于测试阶段一年多。
- 核心包更小。 基础路由的客户端 JS 约 14 KB,RR v7 约 22 KB。
决策矩阵
若存在现有 Remix v2 代码库且需要迁移 codemod,Vite DX 是前三优先级,或团队成员偏初级,选 React Router v7(Remix v3)。
若边缘 SSR 流媒体成本和全球化 TTFB 对 SEO 至关重要,需要编译时类型安全,主要部署到 Cloudflare Workers,或从零开始构建 SaaS,选 TanStack Start。
对于 2026 年大多数以边缘性能和 SEO 流量为业务目标的新建 SaaS,TanStack Start 是更好的默认选择。对于已有 Remix v2 代码库的迁移项目,React Router v7 是显而易见的路径。
迁移笔记:Remix v2 → React Router v7 → TanStack Start
三条路径:
- Remix v2 → React Router v7:
npx react-router migrate。约每 100 个路由耗时 1 天。 - React Router v7 → TanStack Start:无 codemod。TanStack Router 文件命名不同(
routes/blog/$slug.tsxvsroutes/blog.$slug.tsx);useLoaderData变为Route.useLoaderData()。预计每 100 个路由 1–2 周。 - TanStack Start → 其他框架:同样无 codemod。锁定是真实存在的。
想以 TanStack Start 起步且无样板文件税,TanStack Ship 提供预接线的认证、Stripe、管理后台、博客和 47 个 SEO 页——参见功能页。
常见问题
"Remix v3"与 React Router v7 是独立产品吗? 不是。2024 年底,Remix 与 React Router 团队合并为一个框架,以处于"框架模式"的 React Router v7 发布。Remix 品牌继续作为咨询公司存在,但开源框架不再单独维护。参见合并公告。
哪个框架 SEO 更好——TanStack Start 还是 React Router v7? 两者均可爬取。TanStack Start 的边缘 SSR 流媒体在全球地理位置上 LCP 低 15–26%,爬取预算利用更好。对于 SEO 驱动的 SaaS,TanStack Start 的边缘优势是决定性因素。
我需要将 Remix v2 应用重写为 TanStack Start 吗?
需要——无 codemod。npx react-router migrate 处理 Remix v2 → React Router v7 约每 100 个路由 1 天;TanStack Start 需 1–2 周。
TanStack Start 能部署到 Node 吗? 能——TanStack Start 支持 Node、Bun、Deno 和 Cloudflare Workers 作为部署适配器。上述基准数字基于 Cloudflare Workers;TanStack Start 的 Node 数字热请求在 Cloudflare 15% 以内。
关于本文
- 本文由 Huifer 撰写,TanStack Ship 的独立开发者与维护者。2026 年 4 月,他用了 8 天时间分别用 TanStack Start 和 React Router v7 重建了同一套 SaaS。
- 验证来源: TanStack Start 文档 · React Router v7 框架模式文档 · Remix / React Router v7 合并公告 · Cloudflare Workers 文档 · Cloudflare 流式 SSR 指南 · TanStack Router 类型安全文档 · TanStack Ship GitHub 组织 · TanStack Ship 起步仓库
- 最后更新: 2026-05-09 · 更新日志
开始使用 TanStack Ship — 克隆免费起步项目,用一个周末交付你的第一个功能,TanStack Start 预接线至 Cloudflare Workers、D1、R2 和 Stripe。立即尝试 TanStack Ship → · 查看定价