Joh*_*ika 7 service-worker progressive-web-apps workbox
似乎工作箱不清理旧的缓存.例如,如果我指定这样的缓存版本:
var version = 'v2';
workbox.core.setCacheNameDetails({
suffix: version
});
Run Code Online (Sandbox Code Playgroud)
...一旦新服务工作程序激活,我原本希望workbox清理旧版本的缓存,但我的缓存存储看起来像这样:
自己手动清理缓存是否安全?例如,在我的服务人员中:
self.addEventListener('activate', function(event) {
event.waitUntil(
caches
.keys()
.then(keys => keys.filter(key => !key.endsWith(version)))
.then(keys => Promise.all(keys.map(key => caches.delete(key))))
);
});
Run Code Online (Sandbox Code Playgroud)
abr*_*ham 11
您正在将suffix属性值更改为您作为版本的字符串.但Workbox仅使用它来命名存储桶以进行缓存.
前缀和后缀的主要用例是,如果将Workbox用于多个项目并为每个项目使用相同的localhost,则为每个模块设置自定义前缀将防止缓存相互冲突.
Workbox并不认为是x-v2新的替代品x-v1.
您可以使用缓存驱逐策略,因为Workbox将不再使用以前命名的缓存.
但是,您不需要使用suffix您的资产版本.Workbox有许多工具可确保资产正确更新.此外,您的suffix实施将始终以新的缓存开始并下载所有内容.
Precache对资产进行了修订,以便在资产发生变化时生成新的构建,并且部署已更改的资产将更新,并且未更改的资产将保持不变.
策略是完成大部分工作的地方.在定义路径时,您将定义最适合该类型资产的缓存策略.staleWhileRevalidate是一种很好的方法,可以使用设备上的缓存,但Workbox也会并行访问网络并检查是否有对该资源的更新.
您还可以确保旧资产在超过定义的到期长度时被清除.
| 归档时间: |
|
| 查看次数: |
3272 次 |
| 最近记录: |