Yihui’s Blog

浏览器缓存机制-缓存位置

从缓存位置上来说分为四种,并且各自有优先级,当依次查找缓存且都没有命中的时候,才会去请求网络。

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

Service Worker

Service Worker 是运行在浏览器背后的独立线程,一般可以用来实现缓存功能。使用 Service Worker的话,传输协议必须为 HTTPS。因为 Service Worker 中涉及到请求拦截,所以必须使用 HTTPS 协议来保障安全。Service Worker 的缓存与浏览器其他内建的缓存机制不同,它可以让我们自由控制缓存哪些文件、如何匹配缓存、如何读取缓存,并且缓存是持续性的。

Memory Cache

Memory Cache 也就是内存中的缓存,主要包含的是当前中页面中已经抓取到的资源,例如页面上已经下载的样式、脚本、图片等。读取内存中的数据肯定比磁盘快,内存缓存虽然读取高效,可是缓存持续性很短,会随着进程的释放而释放。 一旦我们关闭 Tab 页面,内存中的缓存也就被释放了。

Disk Cache

Disk Cache 胜在容量和存储时效性上,针对容量大,读取速度慢,但是时效长的资源。此类资源是从磁盘当中取出的,此资源不会随着该页面的关闭而释放掉,因为是存在硬盘当中的,下次打开仍会from disk cache。

相比于内存缓存,硬盘缓存会根据HTTP头部中的字段判断哪些资源需要缓存,哪些可以直接使用或者需要重新请求。

Push Cache

Push Cache 是 HTTP/2 中的内容,是HTTP2 在 server push 阶段存在的缓存,当以上三种缓存都没有命中时,它才会被使用,优先级最低,但是是一种趋势。同时,其缓存时间也很短,只针在统一会话(Session)中存在,一旦会话结束就被释放。其具有以下特点:

  • 所有的资源都能被推送,可以推送 no-cache 和 no-store 的资源
  • 时间较短,在Chrome浏览器中只有5分钟左右,同时它也并非严格执行HTTP头中的缓存指令,连接一旦被关闭,就会被释放
  • 多页面可以使用相同的HTTP/2连接,也就是可以使用同一个Push Cache。这主要还是依赖浏览器的实现而定,出于对性能的考虑,有的浏览器会对相同域名但不同的tab标签使用同一个HTTP连接。
  • Push Cache 中的缓存只能被使用一次
  • 浏览器可以拒绝接受已经存在的资源推送
  • 你可以给其他域名推送资源
Maintained by · YihuiEdit on GitHub

Join the conversation

Discuss on GitHub

Sign in with GitHub to comment. Both language versions share this conversation.

Keep reading

View all posts

RESTful 下请求方法的幂等性

概念阐述 一个 HTTP 方法是幂等的,指的是同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。换句话说就是,幂等方法不应该具有副作用(统计用途除外)。所有的 safe 方法也都是幂等的。 幂等性只与后端服务器的实际状态有关,而每一次请求接收到的状态码不一定相同。需要注意的是,服务器不一定…

Read article

WAF 网络应用防火墙

你可能对传统的“防火墙”比较熟悉。传统“防火墙”工作在三层或者四层,隔离了外网和内网,使用预设的规则,只允许某些特定 IP 地址和端口号的数据包通过,拒绝不符合条件的数据流入或流出内网,实质上是一种网络数据过滤设备。 WAF 也是一种“防火墙”,但它工作在七层,看到的不仅是 IP 地址和端口号,还能看到整个 HT…

Read article