先扯点背景:我为什么要折腾三个框架
去年接了个私活,做一个内容站,预算低得可怜,团队就我和一个设计。选技术栈的时候我纠结了整整一周。网上文章要么是“Vue 和 React 哪个好”这种老掉牙,要么是官方文档吹嘘。我干脆花三个月把 Next.js、Nuxt 和 SvelteKit 都搭了一遍。我的机器:MacBook Air M1 8G,Node 20.11.0。项目是一个 50 篇文章的博客 + 评论 + 搜索。我记录了构建时间、包大小、冷启动等。先放结论:没有银弹,但如果你像我一样讨厌配置,SvelteKit 真香。但别急,下面有翻车细节。
硬核对比:构建时间、包体积、冷启动
我用 npm run build 三次取平均。Next.js 14 (App Router) 生产构建 12.3 秒,首屏 JS 102KB (gzip);Nuxt 3.10 构建 8.7 秒,首屏 89KB;SvelteKit 2.0 构建 3.4 秒,首屏 42KB。注意 Next.js 如果用了 Server Components 会好点,但我用的客户端组件多。包体积用 @next/bundle-analyzer 和 nuxi analyze,SvelteKit 用 rollup-plugin-visualizer。有意思的是 Nuxt 的构建时间居然比 Next 快,但它的 dev 启动慢,冷启动 4.2 秒 vs Next 2.8 秒 vs SvelteKit 1.1 秒。我后来发现 Nuxt 的 Vite 配置优化不够。具体参数:Next.js 用了 SWC,Nuxt 用 Vite,SvelteKit 也是 Vite 但编译更激进。
开发体验和踩坑:有些坑你必须知道
Next.js 的 App Router 我学了三天,Server Actions 写表单确实爽,但缓存机制让我 debug 到凌晨两点。Nuxt 的自动导入很方便,但 TypeScript 类型提示有时候抽风,特别是 useFetch 泛型。SvelteKit 的 load 函数和表单 actions 非常直观,但生态小,找个富文本编辑器费劲。我最后用了 TipTap,但 Svelte 版本文档少。还有部署:Vercel 对 Next.js 零配置,但 Nuxt 和 SvelteKit 也支持。费用上,Vercel 免费版够用,但 Nuxt 部署到 Netlify 时边缘函数冷启动 300ms,SvelteKit 用 adapter-auto 到 Cloudflare Pages 冷启动 80ms。我实测了 100 次请求,平均响应时间 Next.js 120ms,Nuxt 210ms,SvelteKit 90ms。当然这跟地域有关。
我的独立观点:别信那些标准答案
别信“React 生态大所以选 Next.js”这种话。小团队(1-3人)如果做内容站、轻交互,SvelteKit 的开发速度和产物体积优势明显。但如果你需要招人,或者依赖大量第三方组件库,Next.js 更稳。Nuxt 适合 Vue 死忠,但它的构建速度优势被 dev 体验拖累。我还发现一个反直觉的点:SvelteKit 的 SEO 其实不比 Next.js 差,因为它的 SSR 输出更干净。我那个博客上线后,Lighthouse 性能分:Next.js 92,Nuxt 88,SvelteKit 99。但 SvelteKit 的社区插件质量参差不齐,我遇到一个 markdown 插件有 XSS 漏洞,自己修了半天。所以我的建议:先花两天把三个框架的 starter 都跑一遍,别只看文章。