我一直在与服务人员和sw-toolbox玩转。两者都是很好的方法,但似乎有其弱点。如何缓存胸围sw工具箱?
我的项目开始使用Google的服务人员方法(link)。我看到这一点的方式是,您必须手动更新缓存清除的版本号。我也可能是错的,但我不认为用户访问过的页面不会被缓存。
相比SW-工具箱方法,我需要补充的是下面的代码:
self.toolbox.router.default = self.toolbox.networkFirst;
self.toolbox.router.get('/(.*)', function (req, vals, opts) {
return self.toolbox.networkFirst(req, vals, opts)
.catch(function (error) {
if (req.method === 'GET' && req.headers.get('accept').includes('text/html')) {
return self.toolbox.cacheOnly(new Request(OFFLINE_URL), vals, opts);
}
throw error;
});
});
然后缓存页面的问题将得到解决。这是我的问题:在将sw-toolbox应用到我的项目之后,除非我使用开发工具清除它,否则旧的服务工作人员不会被清除或替换为新的服务工作人员。
任何想法如何解决这个问题?
您并不是在寻找[ServiceWorkerRegistration.update()](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/update)? –
但是通过将其包含在文件中,每次都会强制更新SW? – oninross
@oninross'update'方法只会在服务工作者发生变化(例如,字节不同)时更新。但这并不一定能解决您的问题,因为更新只会安装新的服务人员。它仍然无法激活,直到旧的不再使用,或者你使用类似'skipWaiting'的方法(见下面的答案)。 –