事件虽然我无法回答这个奇怪的等待时间的可能原因,但我知道如何减少它。
我们可以使用 event.respondWith() 拦截 service worker 中的 fetch 事件。不知何故,在我的情况下,当我的页面需要通过脚本标签加载供应商的 JavaScript 时,我的服务工作者默认拦截每个 fetch 事件以执行缓存然后网络(用于资产)或仅网络(用于数据获取)像这样:
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 毫秒就可以加载上述文件。
希望这会有所帮助