如何优化你的 Next.js 应用以投入生产环境
在将 Next.js 应用部署至生产环境之前,您应当考虑实施一些优化措施和模式,以获得最佳的用户体验、性能和安全性。
本页提供了最佳实践指南,可作为应用开发阶段和上线前准备的参考,同时也介绍了您应当了解的Next.js自动优化机制。
自动优化
以下 Next.js 优化功能默认启用且无需配置:
- 代码分割 (Code-splitting): Next.js 自动按页面分割应用代码,确保导航时只加载当前页面所需的代码。您也可以考虑在适当场景下懒加载 (lazy loading)第三方库。
- 预取 (Prefetching): 当用户视口中出现新路由链接时,Next.js 会在后台预取该路由,使导航几乎瞬间完成。您可以在必要时禁用此功能。
- 自动静态优化 (Automatic Static Optimization): 对于没有阻塞数据需求的页面,Next.js 会自动判定为可预渲染的静态页面。优化后的页面可被缓存,并通过多个CDN节点分发给终端用户。您也可以选择启用服务端渲染 (Server-side Rendering)。
这些默认优化旨在提升应用性能,减少每次网络请求传输的数据量和成本。
开发阶段优化
在构建应用时,我们推荐使用以下功能来确保最佳性能和用户体验:
路由与渲染
数据获取与缓存
- API路由: 使用路由处理器访问后端资源,防止敏感信息暴露给客户端。
- 数据缓存: 验证数据请求是否被缓存,并在适当时启用缓存。确保未使用
getStaticProps
的请求在适当时也能被缓存。 - 增量静态再生 (Incremental Static Regeneration): 使用此功能在构建后更新静态页面,而无需重建整个站点。
- 静态资源: 使用
public
目录自动缓存应用的静态资源(如图片)。
UI与无障碍访问
- 字体模块: 通过字体模块优化字体,自动托管字体文件与其他静态资源,消除外部网络请求,减少布局偏移 (layout shift)。
<Image>
组件: 使用图片组件自动优化图片,防止布局偏移,并以WebP等现代格式提供。<Script>
组件: 使用脚本组件优化第三方脚本,自动延迟加载并防止阻塞主线程。- ESLint: 使用内置的
eslint-plugin-jsx-a11y
插件及早发现无障碍访问问题。
安全性
- 环境变量: 确保
.env.*
文件已添加到.gitignore
,且只有公共变量以NEXT_PUBLIC_
为前缀。 - 内容安全策略 (Content Security Policy): 考虑添加内容安全策略,防范跨站脚本、点击劫持等代码注入攻击。
元数据与SEO
<Head>
组件: 使用next/head
组件添加页面标题、描述等元数据。
类型安全
- TypeScript 和 TS插件: 使用TypeScript及其插件获得更好的类型安全,及早发现错误。
上线前准备
在上线前,您可以运行next build
在本地构建应用并捕获构建错误,然后运行next start
测量应用在生产环境下的性能表现。
核心网页指标
- Lighthouse: 在隐身模式下运行Lighthouse,更好地理解用户体验并发现改进点。这是模拟测试,应与实际数据(如核心网页指标)结合分析。
包分析
使用@next/bundle-analyzer
插件分析JavaScript包大小,识别可能影响性能的大型模块和依赖项。
以下工具可帮助您了解添加新依赖对应用的影响: