sw-precache
と一緒に使用してsw-toolbox
、Angular アプリのキャッシュされたページをオフラインで閲覧できるようにしています。
アプリは、node Express サーバーを介して提供されます。
私たちが遭遇した問題の 1 つはindex.html
、新しい Service Worker のアクティブ化で他のアセットが更新されているにもかかわらず、キャッシュ内で が更新されていないように見えることがあるということです。
index.html
これにより、この場合、既存のバージョン管理されていないアセットを読み込もうとしている古いアセットがユーザーに残り/scripts/a387fbeb.modules.js
ます。
index.html
が正しく更新された別のブラウザでは同じハッシュを持つように見えるため、何が起こっているのか完全にはわかりません。
1つのブラウザで古い(問題のある)Index.html
2cdd5371d1201f857054a716570c1564
(ハッシュでキャッシュされます)には以下が含まれます:
<script src="scripts/a387fbeb.modules.js"></script>
その内容で。(このファイルはキャッシュにもリモートにも存在しません)。
別のブラウザで更新された(良い)index.html
(同じでキャッシュされ2cdd5371d1201f857054a716570c1564
ます)には以下が含まれます:
<script src="scripts/cec2b711.modules.js"></script>
これら 2 つのキャッシュは同じですが、ブラウザーに返されるコンテンツは異なります。
これはどうすればいいですか?sw-precache
これは、新しい SW がアクティブになったときにアトミック キャッシュ バスティングが保証されないということですか? どうすればこれを防ぐことができますか?
これらが役立つ場合、これは から生成された service-worker.jsファイルですsw-precache
。
注:これを回避するためremoteFirst
に戦略(少なくとも)を使用できることに気づきました。しかし、パフォーマンスを最大限に引き出すために戦略をindex.html
使用する方法を理解し、理解したいと思っています。cacheFirst
注2:他の関連する質問で、キャッシュの名前を変更して古いキャッシュをすべて強制的に破棄できることを見ました。しかし、これはsw-precache
更新されたコンテンツのみを破棄するという考えに勝っているように見えますか? これは行く方法ですか?
注 3 : ブラウザーをハード リロードしても、Web サイトが壊れていることに注意してください。Service Worker キャッシュをスキップするため、サイトは機能しますが、キャッシュはまだ間違っています - Service Worker がアクティブ化されていないようです - 私の推測では、この特定の SW は既にアクティブ化されていますが、キャッシュを正しくバストすることに失敗しているためです。その後のハード リフレッシュ以外のアクセスでは、引き続き壊れた が表示されindex.html
ます。