Service Worker 缓存策略怎么和 Vue 路由配合?
我用 Vue 做了个单页应用,加了 Service Worker 做缓存,但发现页面刷新后有时会卡在旧版本,尤其是切换路由后再刷新。是不是缓存策略没配对?
我试过在 sw.js 里用 CacheFirst,也试过 NetworkFirst,但都不太稳定。下面是我 main.js 里注册 SW 的代码:
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/sw.js')
.then(reg => console.log('SW registered:', reg))
.catch(err => console.log('SW register failed:', err));
});
}
而我的 Vue 路由是这样写的:
<template>
<router-view v-slot="{ Component }">
<transition name="fade" mode="out-in">
<component :is="Component" />
</transition>
</router-view>
</template>
现在的问题是:用户离线时能打开首页,但点进 /about 再刷新就白屏了。这该怎么处理?是不是得把所有路由对应的 HTML 都提前缓存?
记得在 sw.js 的 install 事件里先把 index.html 缓存好,不然回退的时候也没东西拿。