前端缓存

2021-02-22  本文已影响0人  Vincent_cy

前端缓存

前端缓存主要是分为HTTP缓存和浏览器缓存。其中HTTP缓存是在HTTP请求传输时用到的缓存,主要在服务器代码上设置;而浏览器缓存则主要由前端开发在前端js上进行设置。

缓存可以说是性能优化中简单高效的一种优化方式了。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷。

对于一个数据请求来说,可以分为发起网络请求、后端处理、浏览器响应三个步骤。浏览器缓存可以帮助我们在第一和第三步骤中优化性能。比如说直接使用缓存而不发起请求,或者发起了请求但后端存储的数据和前端一致,那么就没有必要再将数据回传回来,这样就减少了响应数据。

缓存过程

浏览器与服务器通信的方式为应答模式,即是:浏览器发起HTTP请求 – 服务器响应该请求。那么浏览器第一次向服务器发起该请求后拿到请求结果,会根据响应报文中HTTP头的缓存标识,决定是否缓存结果,是则将请求结果和缓存标识存入浏览器缓存中。

缓存作用

缓存分类

强制缓存

在缓存数据未失效的情况下,可以直接使用缓存数据,那么浏览器是如何判断缓存数据是否失效呢? 在没有缓存数据的时候,浏览器向服务器请求数据时,服务器会将数据和缓存规则一并返回,缓存规则信息包含在响应header中。

image.png

对比缓存

image.png

请求流程

第一次请求

浏览器开始请求 -> 无缓存 -> 向web服务器请求 -> 请求响应,缓存协商 -> 呈现

是否缓存Expries,Cache-Control
缓存时间
Etag
Last-Modifyed

第二次请求

image.png

通过最后修改时间来判断缓存是否可用

  1. Last-Modified: 响应时告诉客户端对比此资源的<b>最后修改时间</b>.
  2. If-Modified-Since: 当资源过期时使用Cache-Control表示的max-age,发现资源具有Last-Modified声明,则再次向服务器请求时带上IF-Modified-Since。
  3. 服务器收到请求后发现带有If-Modified-Since标识则与被请求资源的最后修改时间进行对比,若最后修改时间较新,说明资源又被改动过,则响应<b>最新的资源</b>并返回<b>200状态码</b>。
  4. 若最后修改时间和If-Modified-Since一样,说明资源没有被修改,则响应<b>304标识未更新</b>,告诉浏览器继续使用所保存的缓存文件。

最后修改时间存在的问题

Etag

Etag是实体标签的缩写,根据是实体内容生成的一段hash字符串,可以表示资源的状态。当资源发生改变时,Etag也随之发生变化。Etag是web服务端产生的,然后发给浏览器客户端。

如何干脆不发送请求

Cache-Control

浏览器缓存

本地存储小容量

容量 作用
Cookie 4KB 请求时传递
localStorage 5MB 永久存储
SessionStorage 5MB 用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据。

本地储存大容量

WebSql和IndexDB主要用在前端有大容量存储需求的页面上,例如,在线编辑浏览器或者网页邮箱。

说明 状态
WebSql 关系型数据库 废弃
IndexDB 非关系数据库 正常使用

往返缓存

往返缓存又称为BFCache,是浏览器在前进后退按钮上为了提升历史页面的渲染速度的一种策略。该策略具体表现为,当用户前往新页面时,将当前页面的浏览器DOM状态保存到bfcache中;当用户点击后退按钮的时候,将页面直接从bfcache中加载,节省了网络请求的时间。

参考链接

前端缓存详解

欢迎访问主页,有更多文章内容
转载请注明原出处
原文链接地址:前端缓存

上一篇 下一篇

猜你喜欢

热点阅读