サービスワーカーキャッシュの現在のベストプラクティスは何ですか?プログレッシブWebアプリケーションのキャッシュバージョン管理
サービスワーカーを使用して多数のプロジェクトをキャッシュした後、プロジェクトのキャッシュされたアセットを管理するための保守的な頭痛があります。
ほとんどのケースでは、我々は静的キャッシュ(私たちの頭痛の原因として最も可能性が高い)を使用していて、私たちのsw.jsコードはかなり標準であり、次のようになります。
var cacheName = 'v1:static';
// cache static assets during install phase
self.addEventListener('install', function (e) {
e.waitUntil(
caches.open(cacheName).then(function (cache) {
return cache.addAll([
'./',
'./css/style.css',
'./css/vendor.css',
'./js/build/script.min.js',
'./js/build/vendor.min.js'
]).then(function() {
self.skipWaiting();
});
})
);
});
self.addEventListener('fetch', function (event) {
event.respondWith(
caches.match(event.request).then(function (response) {
if (response) {
// retrieve from cache
return response;
}
// fetch as normal
return fetch(event.request);
})
);
});
の問題は、我々がリリース一度始まります私たちのアプリの新しいバージョンと私たちは、ユーザーのキャッシュを無効にする必要があります。
キャッシュを更新するにはどのような方法が推奨されますか?私はsw-precacheまたはcacheName変数を手動で更新する開発者(またはタスクランナーを介して)を知っています。他の選択肢はありますか?キャッシュ全体ではなく1つのファイルのみを無効にする方法はありますか?
おかげ
スクリプトは '/path/to/script.js?v = 1.2.3'で読み込まれ、vパラメータはプロジェクトのバージョン番号にリンクされていることは珍しくありません。キャッシュが最終的に期限切れになる場合は、古いエントリを削除する必要はありません。 – apokryfos
あなたは 'sw-precache'を認識していると言いますが、これはあなたが記述しているユースケースを意図しています。それを使用しない理由がありますか? (私は作者であり、あなたが懸念している欠点があるかどうか不思議です) –
@JeffPosnick私は、その目的がうまく機能していると思います。 );サービス担当者は比較的新しいので、私は個人的に今のところほとんどのブートストラップコードを書いています。 –