あなたのSWの瞬時の更新のために改良すべき2つのポイントがあります。
はまもなく
- は、アプリのインデックスページより頻繁に訪問したページからご
sw.js
もを呼び出します。
skipWaiting()
メソッドを使用して、すぐにSWをアクティブにします。あなたはSWの新しいverisonのみnavigator.serviceWorker.register()
呼び出しによってチェックされることに注意してください
詳細に
1)navigator.serviceWorker.register
メソッド呼び出し
。
通常、register()
のメソッドは、あなたのページのいずれかでのみ呼び出されます。そのような場合は、そのコマンドをすべてのページに追加する必要があります。ユーザーがPWAを閉じずに別のアプリを開いてから2時間後にアプリに戻ると、register()
と思われるアプリのインデックスページは表示されなくなります。
私の提案は、すべてではないにしても、多くのページに貼り付けることです。欠点はクライアントがsw.js
にもっと多くの呼び出しをすることです。クライアントは時間を失うことなくSWの最終バージョンを取得します。
2)SWはもはやアクティブclientsを持っていると、サービス労働者activate
イベントが呼び出されません
サービスワーカーをアクティブに。したがって、新しいバージョンは、アプリケーションのすべてのインスタンスの後でのみ有効になりますが、1つは閉じられ、残りのタブはリフレッシュされるか、1つのタブが再度開きます。その問題については、quote from MDNを参照してください。
..新しいバージョンがバックグラウンドでインストールされていますが、まだアクティブ化されていません。 これは、古いサービスワーカーをまだ使用しているページがロードされなくなったときにのみアクティブになります。 そのようなページがまだロードされていない場合は、新しいサービスワーカーがアクティブになります。これと
、溶液MDNから採取されたもののClients.claim()
使用例と併せてskipWaiting()
方法を使用することになります。 Click to see more about it on that page:
self.addEventListener('install', function(event) {
event.waitUntil(self.skipWaiting());
});
self.addEventListener('activate', function(event) {
event.waitUntil(self.clients.claim());
});
上記のおかげで、事はアプリが単一ページのWebアプリケーションだということです。だから私はすべての負荷を実行するコードを持っている、問題は、サービスワーカーが再開時にimmediatlyチェックをしていないということです - これは、アプリケーションのシェルもワーカーとキャッシュされている可能性がありますか? –
さて、セクション*#1 *はあなたの状況には関係ありません。しかし* * 2 *のソリューションを実装しましたか?もしそうなら、何か他のことが起こっているかもしれません。キャッシュを更新すると、キャッシュの内容全体が再インストールされます。したがって、たくさんのファイルがキャッシュされていて、クライアントの接続が遅い場合は、すべてのアセットをダウンロードするのに時間がかかります。また、すべてのアイテムがダウンロードされてキャッシュに挿入された後でさえ、SWはアクティブになります。 上記のいずれにも該当しない場合は、PWAが一般に公開されている場合は、そのPWAを調べることがあります。 –