浏览器缓存机制

浏览器有两种缓存策略:一种是需要发送请求,一种是不需要发送请求。强缓存和协商缓存

强缓存:浏览器第一次发送请求后,服务器会返回缓存标识,在http/1.0时是expires,http/1.1时是cache-control。当浏览器需要运用资源的时候,它会去查看文件缓存标识和是否过期,如果没有过期就直接从缓存中获取资源。

expires:规定一个缓存失效时间,过了这个规定的时间,浏览器就需要重新发送请求获取资源。但是这有一个缺陷,就是浏览器和服务器的时间有可能不一样有误差。

cache-control:规定一个字段max-age,这个字段规定了一段有效的时常不是规定具体时间失效,也就是服务器返回后max-age时长能用缓存,这个还可以配合其他指令比如private只能服务器缓存,代理不能缓存。no-cache跳过当前强缓存直接进行协商缓存。no-store不进行任何缓存。s-maxage是给代理服务器规定缓存时长。

当expires和cache-control同时存在浏览器是优先使用cache-control。

协商缓存:在过期时常过期和缓存标识失效时,也就是强缓存失效后,浏览器开始采取协商缓存策略。浏览器会在请求头中携带tag,服务器会根据tag来判断是否启用协商缓存。tag分为两种:Etag和last-modified。

last-modified:第一次请求后服务器会返回给它最后一次修改的时间。当浏览器再次发送请求时会在头部添加tag,这个tag里有上一次改动的时间,如果请求头中的时间小于更新的时间,那么服务器就会重新发送响应数据给浏览器。否则返回304,浏览器可以继续读取缓存数据。

Etag:浏览器第一次发送请求后,服务器是根据当前文件内容然后给文件生成唯一标识符,浏览器把这个携同响应头发送给服务器。当浏览器再次发送请求给服务器,在请求头中也会携带这个唯一标识符,服务器会进行比对,如果不一样则重新发送数据和唯一标识符,不然就返回304,继续读取缓存中的数据。

last-modified有缺陷比如在一秒内文件修改数次就不能检测出,浏览器还是读取的旧缓存。但是在性能上last-modified由于Etag,前者是读取的时间后则是内容。Etag 也有缺陷比如只是编辑了资源文件但是内容并没有改变,这样会造成缓存失效。

缓存地方:service worker cache 、memory cache、disk cache、push cache

service worker cache:运行于浏览器背后,独立于网页有自己的生命周期。可操作性能高,开发人员可以控制缓存内容,如控制仅缓存离线内容或者全部缓存。在离线情况还可以去读取缓存的资源。

memory cache:内存缓存是所有缓存中运行速度最快的,但是内存小缓存保存的时间短

disk cache:磁盘缓存,内存较大,效率比内存缓存低

push cache:是http/2的内容,需要浏览器和服务器同时支持http/2,可以提前预缓存,缓存即将可能需要用到的数据,服务器不在等待浏览器请求时可以主动通过http/2发送数据。极大的提高网页运行速度性能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值