Next.js中Incremental Static Regeneration的revalidate字段为何每次刷新都更新?
Next.js ISR缓存不生效问题排查
核心原因:开发环境特性 + 对fallback与revalidate逻辑的误解
你的问题主要出在两个点上:
开发环境会跳过静态缓存
Next.js的开发模式(npm run dev)为了方便调试,会强制每次请求都重新执行getStaticProps,完全忽略revalidate配置的缓存时间。你看到每次刷新message都更新,是开发环境的正常行为,ISR的缓存逻辑只在生产环境生效。fallback: 'blocking'的运行逻辑
当你设置paths: []+fallback: 'blocking'时:
- 生产环境下,首次访问页面时,服务器会运行
getStaticProps生成页面并缓存; - 接下来的10分钟内,所有请求都会直接返回缓存的页面,不会重新执行
getStaticProps; - 10分钟后,如果有新的请求进来,服务器会在后台重新生成页面,之后的请求就会返回新的缓存内容。
验证步骤
要确认ISR是否正常工作,必须在生产环境测试:
- 执行
npm run build构建生产包 - 执行
npm start启动生产服务器 - 访问页面,记录显示的时间戳;10分钟内反复刷新,时间戳应该保持不变;10分钟后再刷新,会显示新的时间戳。
额外说明
如果生产环境下还是出现每次刷新都更新的情况,需要检查:
- 是否有CDN或服务器层面的缓存配置,覆盖了Next.js的ISR缓存
- 确保没有在代码中加入强制刷新的逻辑(比如自定义headers禁用缓存)
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

