这几天对那个 cache component 感兴趣,就找了个之前的项目试了一下。
结果像捅了 bug 窝子一样。
-
首先是官网文档上一堆错误,他们的 use cache 例子给了非 async 函数可用,但是实际不可用,所以之前那种 shared component 的写法都得改(不写 use client ,但是用 hook 的方式)。ISR 等文档内容在 cacheComponent 无法使用,还没更新。
-
middleware.ts 改名成了 proxy.ts, 但是没测试 windows ,导致 build 之后,windows 下整个 proxy.ts 功能消失(换成 middleware.ts 又可用了)。 确认 16.0.1 修复
-
用文档的 cacheComponent 取代 dynamic='force-static'后发现两者行为不一致,用那个写法的动态内容全返回了 cache-control:no-store,打 debug 日志是走了缓存。原先 force-static 会返回 s-maxage 和 swr
-
一直改代码 build ,观察生产环境的缓存情况,结果发现跑 dev 报错... ...某些情况写"use cache",dev 就会挂掉,但是生产没问题。😂
-
15 时候是 SSG 的 page 全变成了 PPR ,并且加 use cache 也变不回 SSG 。
如果你项目里用了 next-intl 之类 route base 的 i18n,他们可能还没兼容好。next-intl 最好拿到 locale 都设置一下 setRequestLocale,不然它会去读 cookie ,导致所有的组件都要加 Suspend 或者 use cache 。
这是我就试了 2 天发现的... 这特么...
大家打算升级的缓一缓啊。。。或者不要开 cacheComponent