我的回答

memory

disk

local storage

session storage

cache

参考回答

缓存位置

当强缓存命中或者协商缓存中服务器返回304的时候,我们直接从缓存中获取资源。那么这些资源究竟缓存在什么位置呢?

  • 浏览器中的缓存位置一共有四种:按优先级从高到第排列分别是:

    • Service Worker
    • Memory Cache
    • Disk Cache
    • Push Cache

      Service Worker

      Service Worker借鉴了Web Worker的思路,既让js运行在主线程之外,由于它脱离了浏览器的窗体,因此无法直接访问DOM。虽是如此,但它仍然能帮助我们完成很多有用的功能,比如离线缓存、消息推送和网络代理等功能。其中的离线缓存就是Service Worker Cache

      Memory Cache和Disk Cache

      Memory Cache指的是内存缓存,从效率上讲它是最快的。但是从存活时间来讲又是最短的,当渲染进程结束后,内存缓存也就不存在了。 Disk Cache就是存储在磁盘中的缓存,从存取效率上讲是比内存缓存慢的,但是它的优势在于存储容量和存储时长。
      那浏览器如何决定将资源放进内存还是硬盘呢?
  • 比较大的js、css文件会直接被丢进磁盘

  • 反之丢进内存,内存使用率比较高的时候,文件优先进入磁盘

    Push Cache

    推送缓存,是一种低级的网络功能-使用网络堆栈的任何东西都可以使用它,有用的关键是一致性和可预测性,这是浏览器缓存的最后一道防线,它是http/2中的内容,虽然现在应用的并不广泛,但随着http/2的推广,它的应用越来越广泛。

总结

  • 首先强缓存可用,直接使用
  • 否则进入协商缓存,即发送HTTP请求,服务器通过请求头中的If-Modified-Since或者If-None-Match字段检查资源是否更新
  • 若资源更新,返回资源和200状态码
  • 否则返回304,告诉浏览器直接从缓存获取资源