Next.js 16.3

Next.js 16.3

💡 原文英文,约2600词,阅读约需10分钟。
📝

内容提要

Next.js 16.3发布,带来多项性能改进:开发模式内存占用降低90%,构建提速,类型检查更快,服务端渲染性能提升22%。新增Instant Navigations功能,实现SPA式导航体验,包括即时预览、部分预取和导航检查器。还提供自定义错误边界、glob导入等新特性,以及实验性的Rust版React编译器和离线支持。

🔎

延伸解读

升级收益与迁移成本

16.3 为现有应用带来多项零代码改动即可获得的性能提升,如开发模式内存占用最高降低 90%、构建缓存加速、服务端渲染吞吐量提升 22%。但部分新特性(如 Instant Navigations)需要显式开启配置,且未来将成为默认行为,建议开发者提前了解并规划迁移,以充分利用新模型并避免未来升级带来的意外变化。

导航体验的范式转变

Instant Navigations 通过部分预取和即时加载壳,使服务端渲染应用获得接近 SPA 的响应速度。其核心是 'use cache' 指令带来的客户端缓存能力,结合 Suspense 和预取,让动态内容也能即时呈现。这一变化可能改变开发者对导航性能的优化思路,从减少请求转向更精细的预取和缓存策略。

实验性功能的权衡

Rust 版 React 编译器能显著缩短冷启动和热启动时间,但前提是项目已完全脱离 Babel;若仍依赖 Babel 处理其他转换,收益会打折扣。离线支持功能则依赖部分预取缓存,且仍处于实验阶段,生产环境使用需谨慎评估稳定性。

Q&A

Next.js 16.3 在开发模式下内存占用减少了多少?

Next.js 16.3 通过默认启用磁盘缓存和内存驱逐,使开发模式下的内存占用最多减少 90%。例如,vercel.com 仪表盘在编译 50 条路由后内存从 21.5GB 降至 2GB。

Next.js 16.3 如何提升构建速度?

Next.js 16.3 将磁盘缓存功能扩展到 next build,并默认启用,使得重复构建可以复用未更改的构建产物。在 Vercel 内部测试中,某些项目的 CI 构建速度提升了 5.5 倍。

Next.js 16.3 中如何启用 TypeScript 7 进行类型检查?

要使用 TypeScript 7 进行类型检查,只需将项目中的 TypeScript 依赖升级到版本 7,例如运行 `pnpm add -D typescript@^7`。Next.js 会在 next build 时自动使用它。

Next.js 16.3 的服务端渲染性能提升了多少?

Next.js 16.3 用原生 Node.js 流替换了 Web 流,消除了转换开销,在负载下可处理的请求量最多增加 22%。

Next.js 16.3 的 Instant Navigations 是什么?

Instant Navigations 是一套可选功能,旨在让 Next.js 应用拥有类似单页应用(SPA)的即时响应体验。它包含 Instant Insights、Partial Prefetching、改进的 ISR、Navigation Inspector 和 Playwright 测试辅助工具。这些功能通过 'use cache' 指令和客户端缓存实现,未来将成为默认行为。

Next.js 16.3 中如何启用 Partial Prefetching?

在 next.config.ts 中设置 `partialPrefetching: true` 即可启用 Partial Prefetching。该功能允许从任何路由的 UI 中提取可复用的加载外壳,并支持按链接预取任意数量的内容,从而减少不必要的预取请求。

Next.js 16.3 的 Navigation Inspector 有什么作用?

Navigation Inspector 是 Next.js DevTools 中的一个工具,它可以暂停页面加载和客户端导航,让开发者查看用户在加载过程中实际看到的加载状态,从而帮助调试和优化导航体验。

Next.js 16.3 中如何自定义错误边界?

在 Next.js 16.3 中,可以使用 `catchError` 函数定义自定义错误边界。它不会干扰 `notFound` 或 `redirect`,并提供 `retry()` 函数来重新获取失败的数据或重新渲染 Server Components。示例代码:`export default catchError(ErrorFallback)`。

Next.js 16.3 的 Rust 版 React 编译器有什么优势?

Rust 版 React 编译器直接在 Turbopack 中运行,避免了通过 Babel 生成和重新解析代码的开销。在大型应用(如 v0)的测试中,冷构建时间缩短约 34%,热构建缩短约 46%。

Next.js 16.3 如何支持离线体验?

通过启用 `experimental.useOffline` 配置,Next.js 在网络断开时不会抛出错误,而是保持请求挂起并在连接恢复后重试。同时提供 `useOffline` 钩子来检测离线状态,并利用 Partial Prefetching 缓存的路由外壳在离线时仍能渲染。

🏷️

标签

➡️

继续阅读