NextJS中文文档 - Incremental Static Regeneration
增量静态再生 (ISR) 使你能够:
- 更新静态内容,而无需重建整个站点
- 通过为大多数请求提供预渲染的静态页面来减少服务器负载
- 确保自动为页面添加适当的
cache-control
头 - 处理大量内容页面,而不会导致
next build
时间过长
以下是一个简单示例:
这个示例的工作原理如下:
- 在
next build
期间,生成所有已知的博客文章(本示例中有 25 个) - 对这些页面的所有请求(例如
/blog/1
)都被缓存并立即响应 - 60 秒过后,下一个请求仍将显示缓存的(过时的)页面
- 缓存被失效,并在后台开始生成页面的新版本
- 一旦成功生成,Next.js 将显示并缓存更新后的页面
- 如果请求了
/blog/26
,Next.js 将按需生成并缓存此页面
参考
示例
处理未捕获的异常
自定义缓存位置
你可以配置 Next.js 缓存位置,如果你想将缓存的页面和数据持久化到耐用存储,或者在多个容器或 Next.js 应用程序实例之间共享缓存。了解更多。
故障排除
在本地开发中调试缓存数据
如果你使用的是 fetch
API,可以添加额外的日志记录来了解哪些请求被缓存或未缓存。了解更多关于 logging
选项的信息。
jsx
module.exports = {
logging: {
fetches: {
fullUrl: true,
},
},
}
验证正确的生产行为
要验证你的页面在生产环境中是否正确缓存和重新验证,可以通过运行 next build
然后运行 next start
在本地测试生产版 Next.js 服务器。
这将允许你测试 ISR 行为,就像在生产环境中一样。要进一步调试,请将以下环境变量添加到你的 .env
文件中:
bash
NEXT_PRIVATE_DEBUG_CACHE=1
这将使 Next.js 服务器控制台记录 ISR 缓存命中和未命中。你可以检查输出,查看在 next build
期间生成了哪些页面,以及在按需访问路径时页面如何更新。
注意事项
平台支持
部署选项 | 支持状态 |
---|---|
Node.js 服务器 | 是 |
Docker 容器 | 是 |
静态导出 | 否 |
适配器 | 平台特定 |
了解如何在自托管 Next.js 时配置 ISR。
版本历史
版本 | 变更 |
---|---|
v14.1.0 | 自定义 cacheHandler 稳定版。 |
v13.0.0 | 引入 App Router。 |
v12.2.0 | Pages Router:按需 ISR 稳定版 |
v12.0.0 | Pages Router:添加机器人感知 ISR 回退。 |
v9.5.0 | Pages Router:稳定版 ISR 引入。 |