Next.js 16 带来了诸多改进,App Router 已经成为默认推荐的路由方案。本文将从实际项目经验出发,总结在生产环境中使用 App Router 的关键实践。
App Router 的文件系统路由虽然直观,但在大型项目中需要合理的架构设计才能保持可维护性。
Next.js 的嵌套布局是 App Router 最强大的特性之一。通过在目录中放置 layout.tsx,可以实现共享布局而不触发重新渲染。
app/
├── layout.tsx # 全局布局
├── posts/
│ ├── layout.tsx # 帖子列表布局
│ └── [slug]/
│ └── page.tsx # 帖子详情
[slug] 和 [...slug] 是两种常见的动态路由模式。前者匹配单层路径,后者匹配多层路径。选择哪种模式取决于你的内容结构。
路由组 (group) 允许你在不影响 URL 的情况下组织代码。平行路由 @slot 则可以在同一页面中渲染多个独立的视图。
App Router 提供了多种数据获取方式,选择合适的策略对性能至关重要。
默认情况下,服务端组件会在构建时或请求时获取数据。通过 revalidate 配置,可以控制缓存周期。
export const revalidate = 600; // 10 分钟
ISR(增量静态生成)适合内容变化不频繁的页面,SSR(服务端渲染)适合需要实时数据的场景。在实际项目中,混合使用两种策略是最佳实践。
对于需要交互的数据,使用 SWR 或 React Query 在客户端获取。配合 Suspense 边界,可以实现流式渲染和渐进式加载。
生产环境中,性能优化是持续的过程。以下是一些关键的优化点。
Next.js 的 Image 组件自动处理图片优化、懒加载和格式转换。字体优化通过 next/font 实现,避免了布局偏移。
import { Inter } from 'next/font/google';
const inter = Inter({ subsets: ['latin'] });
使用 next/dynamic 实现组件级别的代码分割,特别是对第三方库和重型组件。
const HeavyChart = dynamic(() => import('./HeavyChart'), {
loading: () => <Skeleton />,
ssr: false,
});
ssr: false 参数禁止服务端渲染,适合包含浏览器 API 的组件。但这会增加客户端的 JavaScript 包体积。
部署是开发流程的最后一环,也是最容易出问题的环节。
Vercel 是 Next.js 的默认部署平台,提供了开箱即用的优化。但自定义配置需要注意几个关键点。
生产环境的环境变量需要在 Vercel Dashboard 中配置,不要依赖 .env.local 文件。
生产环境中必须有完善的错误监控。推荐使用 Sentry 或类似的服务来捕获运行时错误。
通过 error.tsx 文件,可以为每个路由段定义自定义错误处理。
'use client';
export default function Error({ error, reset }) {
return (
<div>
<h2>出错了</h2>
<button onClick={() => reset()}>重试</button>
</div>
);
}
Next.js 16 的 App Router 为现代 Web 开发提供了强大的工具集。关键在于理解每个特性的适用场景,并在实际项目中不断实践和优化。