用途:为 Next.js 16 应用提供静态优先(static-first)架构模式,先构建确定性、可缓存的静态外壳,再在需要个性化或请求相关行为的位置开小范围动态孔洞,避免整条路由意外转为动态渲染。
主要能力:路由拆分为请求感知的 Entry 组件、带 'use cache' 的静态渲染器与动态插槽(slot props);通过 cacheComponents: true 启用缓存组件(替代旧 experimental.ppr);支持文件、组件、函数三级 'use cache' 作用域,配合 cacheLife() 缓存配置与 cacheTag() 标签;提供 updateTag() 即时失效与 revalidateTag() 后台失效;缓存键由构建 ID、函数位置哈希、可序列化参数与闭包变量自动生成。还涵盖 RSC 边界规则、Provider 孤岛、数据获取决策、链接预加载策略与常见失败模式修复。
使用方式:在 next.config.ts 中设置 cacheComponents: true;Entry 组件读取 params/searchParams/cookies 等请求相关数据,将动态 UI 作为 ReactNode 插槽传入静态渲染器,并在渲染点用 Suspense 包裹;缓存边界内禁止 cookies()、headers()、searchParams、会话读取、Math.random()、Date.now() 等请求易变内容,需提取到外部再以参数传入。useSearchParams 消费者必须包在 Suspense 中;个性化或易变链接设置 prefetch={false}。
适用场景:内容站点、文档、博客等以静态内容为主、仅局部个性化的 Next.js 16 应用。
限制:不支持 Edge 运行时,需 Node.js;不支持静态导出,需服务端;缓存内的非确定性值只在构建时执行一次;'use cache: private' 是允许运行时 API 的合规逃生口。迁移方面,experimental.ppr 换为 cacheComponents: true,unstable_cache 换为 'use cache' 指令。