我一直在與服務人員和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'的方法(見下面的答案)。 –