Next.js请求记忆、数据缓存等服务器存储目录及缓存疑问
Next.js 缓存相关问题解答
1. 服务器端缓存的存储目录
Next.js 生产构建后的缓存,大多不会以可读文件形式暴露在 /build 目录中。静态缓存(HTML、RSC payload、静态数据)会被编译打包到 /build 的子目录(如 /app、/static),但都是经过优化的结构化或二进制文件,无法直接读取原始缓存内容。
你看到的 /build/fetch-cache 是构建阶段的临时辅助缓存,仅用于 next build 过程中复用 fetch 请求,并非生产运行时的最终缓存。生产环境中,缓存存储位置取决于部署方式:Vercel 等平台会用分布式缓存服务,本地自建服务器默认用内存缓存,不会在 /build 生成持久化的缓存文件——这也是官方文档不明确目录的原因,不同部署场景差异极大。
2. /build/fetch-cache 不含 fetch 返回值 50 的原因
fetch-cache 只缓存构建阶段执行的可缓存请求:
- 只有在
next build期间运行的 fetch 请求(比如静态页面的数据预取),且设置了默认的cache: 'force-cache'、请求为 GET 类型且带有合法缓存头时,才会被存入该目录; - 如果你的 fetch 请求是运行时触发的(比如动态路由、用户交互后执行),构建阶段不会执行这个请求,自然不会出现在
fetch-cache中; - 若请求内容带有动态特性(如动态参数、无缓存头),Next.js 也不会在构建阶段缓存它。
3. 开发服务器的缓存机制
Next.js 开发服务器(next dev)确实有缓存,但逻辑和生产环境不同:
- RSC payload 和组件渲染结果默认不缓存,确保代码修改后能实时刷新;
- fetch 请求默认遵循浏览器缓存规则,也可通过
cache选项手动控制,但缓存仅存在内存中,重启 dev 服务器就会清空; - 开发服务器会缓存编译后的文件(如
.js、.css),但这是构建缓存,和数据缓存不是一回事。
内容的提问来源于stack exchange,提问作者Wenzhen Gong
相关产品推荐
相关产品推荐

