この奇妙な待ち時間の考えられる原因には答えられませんが、それを減らす方法は知っています。
event.respondWith() を使用して、Service Worker でフェッチ イベントをインターセプトできます。どういうわけか、私の場合、私のページが script タグを介してベンダーの JavaScript をロードする必要がある場合、Service Worker のデフォルトはすべてのフェッチ イベントをインターセプトして、このように cache-then-network (アセットの場合) または network-only (データのフェッチの場合) を実行します。 :
if (shouldLoadOfflinePage) {
fetchEvent.respondWith(cacheManager.fromCache(new Request(offlinePage)));
} else if (shouldFromCache) {
fetchEvent.respondWith(cacheManager.fromCache(fetchEvent.request));
} else {
fetchEvent.respondWith(fetch(fetchEvent.request));
}
最後のブロックは、ネットワークのみのリクエストを傍受しますが、これは行う必要がほとんどありません。この不必要なブロックは、どういうわけかブロッキング負荷を引き起こします (しかし、何がそれをブロックしているのかわかりません):
Serviceworker への長いリクエストの待機時間: ~400ms
そこで、不要なフェッチ インターセプトをインターセプトしないことにしました (もちろん、最後のブロックを削除することによって):
if (shouldLoadOfflinePage) {
fetchEvent.respondWith(cacheManager.fromCache(new Request(offlinePage)));
} else if (shouldFromCache) {
fetchEvent.respondWith(cacheManager.fromCache(fetchEvent.request));
}
次に、私のページは、前述のファイルをロードするのに 16 ミリ秒しか必要としません。
これが役立つことを願っています