框架越来越重,开发者越来越累

做全栈开发这几年,有一个越来越明显的感受:工具本身的复杂度,正在超过我们要解决的业务复杂度。

最典型的代表就是 Next.js。

从最初那个简单清爽的 pages/ 目录,到 App Router、React Server Components(RSC)、Server Actions,再到 Next.js 15 重写缓存策略,如今一路狂奔升级到了 Next.js 16。

每一个大版本都在推翻上一个版本的推荐写法:

  • 一会儿教你“一切默认强缓存”,结果生产环境改了数据前端死活不刷新;
  • 一会儿又改成“默认不缓存”,为了提速又塞给你一堆 unstable_cache、PPR(部分预渲染);
  • 为了搞清楚一个异步组件到底是在服务端跑还是客户端跑,控制台天天在报怪异的水合报错(Hydration Mismatch)。

而另一边,服务端运行时也在经历剧震: 曾被无数极客奉为“Node.js 终结者”的 Deno,在商业化探索受挫后迎来被收购命运,社区对其长期治理和维护投入打上了巨大问号。

在 2026 年的技术十字路口,一个人或一个小团队究竟该如何做选型?今天分享我的真实避坑感悟。


Next.js 16 的真实槽点:我们真的需要这么多黑魔法吗?

作为从 Next.js 早期一路用过来的开发者,Next.js 16 确实在 Turbopack 编译性能和并行路由上有进步,但在一人公司的工程实践中,它的心智负担已经逼近临界点:

  1. 强行绑定 Vercel 生态: 虽然官方坚称支持独立 Docker 部署,但类似 ISR(增量静态再生成)、PPR、图片智能优化的最佳体验,如果不放在 Vercel 上,自建 Docker 镜像动不动就要数百 MB,且偶发缓存同步异常;
  2. 调试成本极度高昂: 当一个报错发生时,你很难一眼看清它究竟是 Node 运行时报错、React 编译期报错、还是客户端浏览器水合报错;
  3. 内容站杀鸡用牛刀: 如果你的项目核心是展示内容、做个人博客、写帮助文档或营销落地页,引入整个 Next.js 复杂的全套运行时,相当于开着重型坦克去菜市场买菜。

这就是为什么我的个人博客和内容矩阵,最终毫不犹豫选择了纯粹的 Astro: 默认零客户端 JS,直接输出原生 HTML,完全没有这些花里胡哨的运行时陷阱。


Deno 的被动与服务端的稳健路线

再看服务端运行时。

几年前 Ryan Dahl 推出 Deno 时,全网都在吹它的安全沙箱和原生 TS 支持。但几年过去,事实证明:庞大的 npm 历史生态重力是无法被强行抹平的。

  • 当你尝试在一个严肃业务里接入某些历史悠久的原生 C++ 扩展、复杂的支付 SDK 或特定的企业级 ORM 时,Deno 的兼容层总会在深夜给你来一个冷门报错;
  • 如今商业变动与收购靴子落地,未来的维护精力难免受到牵制。

对于我们靠软件吃饭的独立开发者来说,最害怕的就是把地基打在一个可能面临维护停滞的平台上。


2026 我的避险选型法则

吃够了盲目追新的亏,我现在给自己的项目定下了极简的技术分流原则:

你的业务核心属于哪一类?
 ├─ 营销站、个人博客、文档中心、SEO/广告变现站
 │   └─► 坚决用 【Astro】
 │       (极速构建、零水合困扰、首屏 TTFB 永远满分)
 │
 ├─ 复杂交互后台、多人协同 SaaS、强表单业务中台
 │   └─► 谨慎使用 【Next.js 16】 或切回标准 【React Router v7 / SPA + Go API】
 │       (剥离臃肿的 Server Components,前后端职责清晰分明)
 │
 └─ 服务端后台与业务微服务
     └─► 放弃小众实验性运行时,回归 【Node.js (LTS) + pnpm】 或 【Bun (轻量工具)】
         (拒绝任何有停止维护风险的生态,把稳定性放在第一位)

结语:返璞归真才是高级

技术圈最容易犯的毛病,就是把“新特性”等同于“生产力”。

框架厂商为了卖自己的云平台服务,会不断制造新的概念和架构层;但独立开发者的目标只有一个:用最低的维护心智,把可靠的产品交到用户手里。

选那些被成千上万个项目验证过的稳健底座,把有限的精力省下来去做用户调研和功能交付,比整天跟着版本号折腾升级有价值得多。