浏览器缓存和ServiceWorker缓存之间的区别

时间:2019-07-23 05:29:24

标签: caching service-worker browser-cache

我不了解浏览器缓存和ServiceWorker缓存之间的区别。

例如,在浏览器缓存中,为所有资源设置过期缓存。这样,HEAD不应在时限内进行验证。换句话说,您应该能够以脱机状态获取资源,因为您无需查询服务器。

另一方面,如果在ServiceWorker中设置缓存优先级,则可以在第二次之后以脱机状态获取资源。

“浏览器缓存和ServiceWorker缓存都可以使资源处于脱机状态”

了解这一点好吗?

1 个答案:

答案 0 :(得分:0)

我认为“浏览器缓存”是指http缓存。这是整个浏览器中响应的机会缓存。 (大多数情况下就是这样。在某些浏览器中,其由顶级选项卡的原点隔离。)浏览器可以随时从http缓存中逐出响应。它不保证数据随时都会存在于http缓存中。通常,尽管如此,它使用基于LRU的启发式算法来老化较旧的未使用数据。网站可以使用缓存控制标头影响http缓存中存储的内容。

相比之下,服务工作者中使用的Cache API更像IndexedDB。尽管它像http缓存一样存储响应,但不同之处在于该站点完全受控。有一个用于存储和检索数据的显式API。浏览器保证,除非站点自行执行或通过配额机制逐出整个源,否则不会删除Cache API数据。与http缓存相比,Cache API的行为也更加精确。但是,在加载过程中使用Cache API数据的唯一方法是通过ServiceWorker来匹配使用Cache API的请求,然后将Response返回到FetchEvent.respondWith()

请注意,ServiceWorker可能最终与这两个系统进行交互。它可以显式使用Cache API。当调用fetch()时,它也可以从http缓存中提取。