我不了解浏览器缓存和ServiceWorker缓存之间的区别。
例如,在浏览器缓存中,为所有资源设置过期缓存。这样,HEAD不应在时限内进行验证。换句话说,您应该能够以脱机状态获取资源,因为您无需查询服务器。
另一方面,如果在ServiceWorker中设置缓存优先级,则可以在第二次之后以脱机状态获取资源。
“浏览器缓存和ServiceWorker缓存都可以使资源处于脱机状态”
了解这一点好吗?
答案 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缓存中提取。