对于使用块(代码分割)的 React 网站来说,最好的缓存策略是什么?
在使用块之前,我只会在 CloudFront 中缓存所有内容一年,并在部署新版本的网站后删除旧文件并使缓存失效。效果很好。
但是,在我开始使用块之后,我开始遇到问题。一个常见的问题是,在部署新版本的站点后,我删除了旧文件并使缓存失效。一名用户已经在旧版本的网站上处于活动状态,并且他的网站版本尝试加载不再存在的块,因此网站对他来说崩溃了。
一个潜在的解决方案是将所有旧文件保留一个月或更长时间,并在部署过程中删除所有早于 X 个月的文件。
这个问题有没有更好的解决办法。我是否错过了 CRA(Create React App)提供的 Service Worker 提供的一些特别的东西?如果我没记错的话,它提供了某种缓存清除功能。
谢谢。
这是一个老问题,但一般推荐的答案是确保您的应用程序对其资产使用文件修订。
这意味着资产将有一个唯一的“哈希”作为其文件/块名称的一部分。
这样,当文件的底层内容更改时,文件名本身也会更改。
然后,您真的不需要担心删除像 CloudFront 这样的 CDN 的文件,因为它将从其缓存文件/未访问的资源中删除。
此外,通过正确配置构建工具(例如 next.js,将自动执行此操作),如果块没有更改,则它们可以在构建中保留。然后,当新的部署发布时,只需要下载 JS 块的子集,而不是再次下载整个应用程序的 JS。