service worker 发出多个请求来缓存资源
Multiple requests are being made from service worker to cache a resource
因为我正在构建渐进式网络应用程序。我们正面临 service worker 的奇怪行为。
1. Clear cache and unregister service worker
2. Go to www.example.com
3. Examine the network calls for resources (JS/CSS)
预期结果:
一个资源应该只有一个网络请求。
实际结果:
正在为每个资源发出两个网络请求 [
您在 sw-precache
中看到的正在获取资源以填充其缓存。这与受控页面发出的初始请求无关。这是一个相当常见的模型,无论您是否使用 sw-precache
.
(顺便说一句,我看到你明确地控制了你的 JS 和 CSS 资源,这很好。你会注意到 sw-precache
附加了一个 cache-busting header 现在对其预缓存请求进行处理,这意味着它们将始终针对网络而不是 HTTP 浏览器缓存。即将发布的 sw-precache
4.0.0 版本,您现在可以通过 master
分支,有一个新的 dontCacheBustUrlsMatching
option,它允许您 opt-out of cache-busting 对于您通过文件名明确版本控制的资源。使用该选项意味着额外的 sw-precache
填充其缓存的请求将通过 HTTP 浏览器缓存完成,跳过网络访问。)
因为我正在构建渐进式网络应用程序。我们正面临 service worker 的奇怪行为。
1. Clear cache and unregister service worker
2. Go to www.example.com
3. Examine the network calls for resources (JS/CSS)
预期结果: 一个资源应该只有一个网络请求。
实际结果:
正在为每个资源发出两个网络请求 [
您在 sw-precache
中看到的正在获取资源以填充其缓存。这与受控页面发出的初始请求无关。这是一个相当常见的模型,无论您是否使用 sw-precache
.
(顺便说一句,我看到你明确地控制了你的 JS 和 CSS 资源,这很好。你会注意到 sw-precache
附加了一个 cache-busting header 现在对其预缓存请求进行处理,这意味着它们将始终针对网络而不是 HTTP 浏览器缓存。即将发布的 sw-precache
4.0.0 版本,您现在可以通过 master
分支,有一个新的 dontCacheBustUrlsMatching
option,它允许您 opt-out of cache-busting 对于您通过文件名明确版本控制的资源。使用该选项意味着额外的 sw-precache
填充其缓存的请求将通过 HTTP 浏览器缓存完成,跳过网络访问。)