本文基于下表进行讨论。场景一:长期缓存(Cache,fallingbacktonetwork)当缓存资源有效时(<=30天):ServiceWorker在不访问网络的情况下立即返回缓存资源。当缓存资源过期时(>30天):ServiceWorker去网络获取资源。浏览器在其HTTP缓存中没有该资源的副本,因此它在服务器端获取它。缺点:HTTP缓存在这种情况下提供的价值较小,因为当ServiceWorker中的缓存过期时,浏览器总是会将请求传递给服务器端。场景二:中期缓存(Stale-while-revalidate)当缓存资源有效时(<=1天):ServiceWorker立即返回缓存资源,去网络获取资源。浏览器在其HTTP缓存中有该资源的副本,因此它将该副本返回给serviceworker。当缓存资源过期(>1天):ServiceWorker立即返回缓存资源,并去网络获取资源。浏览器在其HTTP缓存中没有该资源的副本,因此它在服务器端获取它。缺点:ServiceWorkers需要额外的缓存破坏来覆盖HTTP缓存,以便充分利用“重新验证”步骤。场景三:短期缓存(Networkfallbacktocache)当缓存的资源有效时(<=10分钟):ServiceWorker去网络获取资源。浏览器在它的HTTP缓存中有一份资源的副本,所以它把它返回给serviceworker,而不用去服务器端。当缓存资源过期(>10分钟):ServiceWorker立即返回缓存资源,并去网络获取资源。浏览器在其HTTP缓存中没有该资源的副本,因此它在服务器端获取它。与中缓存场景类似,ServiceWorker需要额外的缓存清除逻辑来覆盖HTTP缓存,以便从服务器端获取最新资源。在所有场景下,即使网络不稳定,ServiceWorker缓存仍然可以返回缓存的资源。另一方面,当网络不稳定或中断时,HTTP缓存不可靠。综上所述,ServiceWorker的缓存逻辑不需要和HTTP缓存过期逻辑保持一致。如果可能,请在serviceworker中使用更长的过期逻辑,以便为serviceworker提供更多控制权。HTTP缓存仍然发挥着重要作用,但是当网络不稳定或宕机时它就不可靠了。
