Service Worker缓存策略下,React应用更新后旧资源如何清理?
在React项目里用了Service Worker做静态资源缓存,但最近部署新版本后,部分用户还是加载旧的JS文件。我按网上的方法在service-worker.js里设置了版本号:
// service-worker.js
const CACHE_VERSION = 'v1.1';
const FILES_TO_CACHE = [
'/',
'/static/js/main.chunk.js',
'/static/css/main.chunk.css'
];
但发现控制台报错”Uncaught SyntaxError: Unexpected token”,推测是旧缓存未清除。尝试过在注册时添加{updateOnExit: true},但重启浏览器后问题依旧存在,该怎么彻底替换旧缓存呢?
关键问题在于你虽然改了版本号,但旧的缓存还在那里躺着。正确的做法是在activate事件里把旧缓存清理掉:
另外有个小建议:可以把版本号直接拼在缓存key上,比如:
const CACHE_NAME = 'my-cache-' + CACHE_VERSION;这样在开发时更容易区分不同版本的缓存。
部署后还有个坑要注意:别忘了在index.html里手动刷新下,有时候浏览器会死抱着旧service worker不放。实在不行可以试试在注册时用
{scope: './'}。希望能帮到你!这破缓存问题有时候真的让人想砸键盘...
同时在主页面注册 SW 的地方加个时间戳强制更新: