Service Worker 缓存 CSS 文件后样式不生效怎么办?
我用 Service Worker 缓存了静态资源,但发现页面加载时有时候 CSS 样式没应用上,刷新一下又好了。是不是缓存策略写错了?
我试过在 install 事件里缓存 CSS,也确认文件路径没错,但偶尔还是会出现无样式的情况。下面是我项目里的一段关键 CSS:
body {
font-family: 'Inter', sans-serif;
background-color: #f8fafc;
margin: 0;
padding: 20px;
}
.header {
color: #1e293b;
font-size: 24px;
}
这种情况该怎么排查?是不是应该用 Cache First 还是 Network First 策略?
我猜你可能是这么写的:
这种Cache First策略会导致CSS更新时出现版本不一致的问题。
改成这样会稳很多:
另外记得在install事件里不要预缓存CSS,这东西更新太频繁了。调试时可以看下Chrome开发者工具的Application -> Service Worker面板,确认下当前生效的缓存版本。
还有个小技巧,给CSS文件加个版本号或者hash,比如style.v2.css,这样能避免缓存问题。现在都是webpack打包自动处理这事了。
另外检查一下你缓存 CSS 时响应头里的
Content-Type是不是text/css,有些服务器返回错了会导致浏览器不认。还有别忘了改缓存版本号,不然旧缓存会坑死你。