Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >这是前端需要的缓存知识!

这是前端需要的缓存知识!

作者头像
LamHo
发布于 2022-09-26 02:43:49
发布于 2022-09-26 02:43:49
3470
举报
文章被收录于专栏:小前端看世界小前端看世界

前言

作为一名优秀的前端开发者,必须了解浏览器以及http协议中的缓存策略。因为在日常的开发中,我们会经常接触到一些性能优化的需求,那么缓存(cache)这种技术无论是在前端开发领域也好,后端开发领域也好,也是一种非常常见以及有效的方案。只是前后端之间的缓存方式不太一样,而且后端很多时候需要缓存的是数据,而前端往往需要利用浏览器和http协议去缓存数据或者文件,从而达到提升加载速度的效果。

浏览器缓存

浏览器的缓存是通过HTTP协议中的一些特定的字段去控制某个文件是否进行缓存,过期时间等信息,用一张简单的图去描述浏览器是如何缓存文件的。

浏览器分为两种缓存策略:

  1. 强缓存
  2. 协商缓存

强缓存

浏览器在先服务器获取资源之前,首先会查看当前的资源是否命中强缓存,如果命中了强缓存,那么将不会进行协商缓存,直接从缓存中获取资源内容进行缓存。

设置一个资源的强缓存一般使用Expires(http1.0)和Cache-Control(http1.1)这两个响应头属性进行设置。

Expires

Expires字段是http1.0的控制强缓存字段,其值是一个绝对时间的GMT格式的时间字符串。代表着该资源的有效时间。但是如果服务器和客户端之间的时间偏差较大,就会出现缓存混乱等情况。

Cache-Control

Cache-Control是http1.1提出的新强缓存规范,它的值是一个相对时间,例如Cache-Control: max-age=90,代表该资源的有效时间是第一次获取资源后90秒失效。(也是现在最常用的强缓存控制字段)。Cache-Control还有一些其他值可以设置。

  • no-cache::需要进行协商缓存,由服务器确认是否使用缓存。
  • no-store: 禁止使用缓存,每一次都要重新请求服务器。
  • public:可以被所有用户缓存,包括浏览器和cdn等中间代理商。
  • private:只能对客户端(如浏览器)使用缓存。

为了解决兼容问题,一般Expires和Cache-Control是同时设置的。在支持Cache-Control的http协议中,Cache-Control的优先级更高。

协商缓存

协商缓存一般是强缓存没有命中,那么就会进入协商缓存,客户端将当前资源的一些信息携带在请求头的header当中,由服务器判断是否使用缓存,如果命中协商缓存,那么将返回304。

Last-Modify/If-Modify-Since

浏览器首次请求一个资源的时候,服务器会返回该资源的最后修改时间,通过在响应头的Last-Modify属性中返回最后修改时间,浏览器会将该属性值保存起来,在下一次对同样的资源发起请求的时候,会将上一次请求时获取到Last-Modify的值携带在请求头的If-Modify-Since属性中,如果服务器验证最后修改时间一致,那么将会返回304。否则就会重启响应新的资源内容以及新的最后修改时间给浏览器。

Last-Modify/If-Modify-Since属性有一个缺点,就是返回的值是最后修改时间进行判断的,但是如果文件在一个周期内,发生过改变,但是最后还是变回原样,那么最后修改的时间会发生变化,那么会导致协商缓存失效,导致文件内容并没有变化,但是浏览器会重新下载资源。为了解决这个问题,后来就出现了ETag/If-None-Match。

ETag/If-None-Match

ETag/If-None-Match和Last-Modify/If-Modify-Since不一样,ETag/If-None-Match返回的是该资源的唯一标识,而且是个资源的内容挂钩的,如果你多次修改文件,但是文件最终的内容还是一样,那么ETag的标识码还是一样的。这样就有效的解决了Last-Modify/If-Modify-Since的问题。

ETag/If-None-Match和Last-Modify/If-Modify-Since的携带方式是一样。

浏览器的资源缓存策略

在通过访问浏览器获取资源后,浏览器本身也有一套缓存的文件存放机制,主要分为memory cachedisk cache两种方式。从名字上就很清晰知道一个是存放在内存当中,一个是存放到硬盘当中。

memory cache

webkit内核将资源分为两种,一种是HTML资源,或者下载项资源。另外一种是派生资源,例如JS、CSS和图片。webkit只支持对派生资源中的JS、CSS、图片等存放在memory cache中。其他派生资源都是存放在disk cache中。进程关闭时,内存缓存将会被清除。

disk cache

如上述所说的,资源都会存放到硬盘中。进程关闭时,硬盘缓存不会清除。那么什么资源什么时候会存放到硬盘,什么时候会存放到内存呢?

这个需要看当前的资源的大小,内存空间是否足够等因素决定。

浏览器三级缓存

  • 内存中查找缓存资源
  • 内存中没有查找到缓存资源将会在硬盘中查找
  • 硬盘中查找不到资源,将会发起请求获取远程资源
  • 获取到资源后根据资源的类型分别存放到内存或者硬盘中。

总结

浏览器缓存一般又三部分组成。

  • 强缓存
  • 协商缓存
  • 浏览器的三层缓存

理解浏览器和http协议中控制缓存的字段对我们日后进行性能优化起到很关键的作用。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
强制缓存和协商缓存的区别
强制缓存:根据Expires(response header里的过期时间)判断,浏览器再次加载资源时,如果在这个过期时间内,则命中强缓存,并不会向服务端发起请求,展示为200状态。
杜志强
2022/04/22
9.8K0
强制缓存和协商缓存的区别
一文读懂什么是http的强缓存以及协商缓存?简单易懂
浏览器首次请求资源后,需要再次请求时,浏览器会首先获取该资源缓存的header信息,然后根据Cache-Control和expires来判断该资源在本地缓存否过期。若没过期则直接从本地缓存中获取资源信息,浏览器就不再向服务器重新请求资源,如过期则需重新发送请求,重新缓存资源,更新缓存时间。
inline705
2021/12/09
3.2K0
一文读懂什么是http的强缓存以及协商缓存?简单易懂
如何通过Nginx配置来优化你的网络请求
为什么需要优化 缓存可以减少冗余的数据传输。节省了网络带宽,从而更快的加载页面。 缓存降低了服务器的要求,从而服务器更快的响应。 那么我们使用缓存,缓存的资源文件到什么地方去了呢?首先来看下有哪几种缓
兔云小新LM
2019/12/05
1.6K0
浏览器缓存机制
简单的说,通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。
周三不加班
2019/06/02
1.2K0
亿级流量客户端缓存之Http缓存与本地缓存对比
客户端缓存分为Http缓存和本地缓存,使用缓存好处很多,例如减少相同数据的重复传输,节省网络带宽资源缓解网络瓶颈,降低了对原始服务器的要求,避免出现过载,这样服务器可以更快响应其他的请求
架构之家
2022/09/01
1.9K0
亿级流量客户端缓存之Http缓存与本地缓存对比
如何让浏览器不缓存文件
最近在项目开发中遇到一个需求:项目打包后,可以根据修改配置文件,进而动态替换页面上的文本。由于项目基本不涉及到后端,因此不考虑通过接口来修改。这就需要前端项目打包后需要暴露一个配置文件,每次页面刷新时会获取到最新的配置,达到动态替换页面文本的目的。
chuckQu
2022/08/19
3.1K0
强缓存和协商缓存
控制 强缓存的两个header字段是:expires 和 cached-control。
用户3258338
2019/07/19
1.2K0
强缓存和协商缓存
图解 HTTP 缓存
本文首发于政采云前端团队博客:图解 HTTP 缓存 https://www.zoo.team/article/http-cache
前端劝退师
2020/05/20
6870
强缓存与协商缓存
浏览器缓存是浏览器在本地磁盘对用户最近请求过的资源进行存储,当访问者再次访问同一资源时,浏览器就可以直接从本地磁盘加载资源,通过缓存的方式就可以减少与服务器的数据传输,减少服务器的负担,加快页面响应速度等。
WindRunnerMax
2020/08/27
1.1K0
浏览器 & HTTP 缓存策略
强缓存是指在缓存期间,请求不会发送到服务器,浏览器直接返回缓存结果,需要设置 Header:
leocoder
2020/03/27
6320
前端本地缓存概况之浏览器缓存策略
一直以来,前端性能优化 都是前端程序员在业务开发过程中不得不考虑的一个点。前端同学也一直寄希望于服务器更大的吞吐量、更密集的cdn节点;更寄希望于浏览用户使用更优秀的浏览器及更大的带宽。。。然而随着上述几种情况一一被落实时,前端性能仍然没有达到一个让人满意的结果。。。
YP小站
2020/07/15
1.9K0
前端本地缓存概况之浏览器缓存策略
HTTP 缓存机制
完整高频题库仓库地址:https://github.com/hzfe/awesome-interview
HZFEStudio
2021/09/28
1.1K0
强制缓存和协商缓存的区别
浏览器缓存(Brower Caching)是浏览器在本地磁盘对用户最近请求过的文档进行存储,当访问者再次访问同一页面时,浏览器就可以直接从本地磁盘加载文档。
用户9914333
2022/12/14
1.1K0
强制缓存和协商缓存的区别
【Http原理】请问 HTTP 是怎么进行缓存的?
HTTP 缓存是一块重要的内容,这是作为一个前端工程师必须要掌握的优化技能,也能让自己明白自己的工作,此次主要分了几个点进行总结
神仙朱
2019/08/02
6180
【Http原理】请问 HTTP 是怎么进行缓存的?
Web 性能优化-缓存-HTTP 缓存
HTTP 缓存通常要配合客户端(浏览器)使用才能发挥效果,所以又被称之为浏览器缓存,是 Web 性能优化的一大利器。
李振
2021/11/26
6040
HTTP缓存策略
缓存的作用就是提升网页加载速度。浏览器加载一个完整的网页势必会引用外部资源(图片,js,css)。若每次加载网页都要去加载这些外部资源则会引起不必要的时间和资源浪费,且会影响用户体验。而解决上述问题需要一个优秀的缓存策略。除此之外,web缓存的优点还有很多,例如:减轻服务器压力
ruochen
2021/11/25
6600
网络篇—浏览器缓存(一)
网络篇—浏览器缓存(一) 一、缓存类型 有两种,强缓存和协商缓存 强缓存 不会向服务器发送请求,直接从缓存中读取资源; 协商缓存 向服务器发送请求,服务器会根据这个请求的request header的一些参数来判断是否命中协商缓存,如果命中,则返回304状态码并带上新的response header通知浏览器从缓存中读取资源; 异同 共同点:都是从客户端缓存中读取资源; 区别:强缓存不会发请求,协商缓存会发请求; 二、和缓存有关的header 强缓存 Expires:response he
keyWords
2018/09/19
7310
一文彻底搞懂前端缓存机制
1)浏览器在加载资源时,先根据这个资源的一些http header判断它是否命中强缓存,强缓存如果命中,浏览器直接从自己的缓存中读取资源,不会发请求到服务器。比如某个css文件,如果浏览器在加载它所在的网页时,这个css文件的缓存配置命中了强缓存,浏览器就直接从缓存中加载这个css,连请求都不会发送到网页所在服务器;
hellocoder2029
2022/10/21
7010
浏览器缓存机制剖析
“缓存一直是前端优化的主战场,利用好缓存就成功了一半。本篇从HTTP请求和响应的头域入手,让你对浏览器缓存有个整体的概念。最终你会发现强缓存,协商缓存 和 启发式缓存是如此的简单。 ” 导读 浏览器对
CSDN技术头条
2018/02/12
1.4K0
浏览器缓存机制剖析
网络编程之HTTP缓存相关头
本文说的是HTTP中控制客户端缓存的头有哪些。网上这方面的文章很多了,这里就说下个人的理解。
lyb-geek
2018/07/26
3630
相关推荐
强制缓存和协商缓存的区别
更多 >
LV.0
腾讯高级前端开发工程师
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档