关于前端:缓存

10次阅读

共计 1073 个字符,预计需要花费 3 分钟才能阅读完成。

DNS 缓存

  • 缓存 URL 与 IP 对应关系

CDN 缓存

  • 服务器缓存,让申请到就近的服务器下面获取资源,自身有过期机制,过期会向根服务器申请资源

浏览器缓存

  • 分为强缓存和协商缓存
  • 缓存个别保留在内存或硬盘上
  • 个别把不须要频繁读取的文件放在硬盘上,如 CSS,而须要频繁加载的内容保留在内存上,如 JS,以缩小 IO 开销。
  • 缓存过程个别先从内存找,没有去硬盘找,再没有发动网络申请,而后缓存资源,以备下次应用。

强缓存

  • 无需发动网络申请,间接从本地读取缓存
  • 相干协定头:Expires、Cache-Control
  • Expires 中能够设置一个相对过期工夫,浏览器会依据本地工夫比照,来判断是否曾经过期,从而选取读取缓存与否
  • Expires 毛病是,所写的是相对工夫,本地工夫和服务器工夫可能存在偏差,导致资源不能及时更新
  • Cache-Control 能够设置一个绝对工夫(max-age),以秒为单位
  • 浏览器读取到资源后依据 Cache-Control 的绝对工夫,计算其过期工夫,再下一次读取资源时回去判断是否过期,从而抉择读取缓存与否
  • Cache-Control 中能够设置以下几个属性

    • no-cache,设置了即进行协商缓存
    • no-store,不缓存
    • public,除终端用户外,两头服务器如 CDN 等都能够对资源进行缓存
    • private,只有终端用户能够对资源缓存
  • Cache-Control 比 Expires 优先级高

协商缓存

  • 与强缓存的区别是,须要额定发送一个申请至服务器,去判断是否须要更新资源,强缓存没有命中时会进行协商缓存
  • 相干协定头:Last-Modify/Last-Modify-Since、ETag/If-None-Match
  • Last-Modify 是服务器返回给用户的,外面是一个工夫值,进行协商缓存时,用户会把该值放到 Last-Modify-Since 外面,返回给服务器,服务器依据该工夫判断资源是否更新,缓存是否过期,若无需更新,则返回 304 给服务器,服务器从缓存读取资源,若过期,则返回资源给用户,用户应用新资源,同时更新缓存
  • Last-Modify 毛病是,资源可能只是周期更新,比方做流动,周一到周五资源都不一样,但每周一的资源是一样的,应用 modify 判断因为是工夫纬度的,所以每天都须要更新
  • ETag/If-None-Match 逻辑与 modify 雷同,但其给每个资源分配了一个惟一的标记,依据该标记来判断是否须要更新资源,若同一个文件,其 Etag 扭转了,则须要更新,否则无需更新,所以可解决周期性更新的问题
  • ETag 比 Last/Modify 优先级高,同时应用时,先判断 ETag 再判断 Modify
正文完
 0