前端性能优化之HTTP缓存
创始人
2025-05-29 21:15:21

前端缓存

前端缓存可分为两大类:HTTP 缓存浏览器缓存

我们今天重点是 HTTP 缓存,下面这张图是前端缓存的一个大致知识点:

前端缓存

HTTP 缓存

首先解决困扰绕人们的老大难问题:

一、什么是HTTP缓存?

HTTP 缓存会存储与请求关联的响应,并将存储的响应复用于后续请求。(MDN)

通俗的讲,HTTP 缓存指的是:当浏览器向服务器发起资源请求时,会首先抵达浏览器缓存,如果浏览器有当前请求资源的有效副本,就可以直接从浏览器缓存中取出资源并返回,不用再重新去服务器中获取了。

常见的 HTTP 缓存只能缓存 GET 请求的资源,对于其他类型的响应则无能为力,所以后续说的请求缓存都是指 GET 请求。

HTTP 缓存都是从第二次请求开始的,第一次请求资源时,服务器返回资源,并在 response headers 头中回传资源的缓存参数;第二次请求时,浏览器会判断这些参数,命中强缓存就直接返回 200,否则就把缓存相关参数添加到 request headers 中传给服务器,服务器判断是否命中协商缓存,命中则返回 304,否则服务器会返回 200 并返回新的资源。

浏览器第一次请求流程图:
第一次请求服务器

注意: 官网文档上用词为 fresh 和 stale,国内的文档上大多都用词为强缓存和协商缓存,此文也如此。

1. HTTP 缓存分类

根据是否需要向服务器重新发起请求来分类,可以分为强缓存协商缓存

注意: MDN上一般按照私有缓存和共有缓存来分来,但以上分类更适合于我们初学者了解缓存相关知识,所以本文按以上方式对缓存进行分类!

下图是强缓存和协商缓存的一些对比:

强缓存与协商缓存对比

1.1 强缓存

强缓存是指在缓存数据未失效的情况下(即 Cache-Controlmax-age 没有过期或者 Expires 的缓存时间没有过期),那么就会直接使用浏览器的缓存数据,而不会请求服务器。

强缓存生效时,HTTP 状态码为 200。

优点:这种方式页面加载速度是最快的,性能也是很好的。
缺点:如果在这期间服务端资源有更新,页面上是拿不到更新后的数据的。 这种情况我们在开发中也是经常遇见的,比如我们修改了页面的某个样式,在页面上刷新了但没有生效,因为走的是强缓存,所以 Ctrl + F5 一顿操作过后就好了。

跟强缓存相关的 header 头属性有(Pragma / Cache-Control / Expires)

强缓存相关的 header 头属性
强缓存流程图:
强缓存

1.2 协商缓存

当以下条件满足一个或多个时:

  1. 当第一次请求时,服务器返回的响应头中没有设置 Cache-Control 和 Expires 字段;
  2. Cache-Control 和 Expires 过期;
  3. Cache-Control 和 Pragma 设置为:no-cache;

那么浏览器第二次请求时,就会与服务器进行协商,与服务端对比判断资源是否进行了更新。

如果服务端资源未更新,则会返回 304 状态码,告诉浏览器当前缓存可继续使用;如果服务端资源有更新,则会返回 200 状态码,并同时返回更新后的资源和缓存信息字段。

与协商缓存相关的字段有 ETag / If-None-Match、Last-Modified / If-Modified-Since,此时请求头与响应头需要成对出现。
在这里插入图片描述

协商缓存流程示意图如下:
协商缓存

二、如何使用 HTTP 缓存?

一般需要缓存的资源有 HTML 页面和其他一些静态资源:

  1. HTML 页面缓存的设置主要是在 标签中嵌入 字段,这种方式只对页面有效,对页面上的资源无效。

    1.1 HTML 页面禁用缓存的设置如下:

    
    
     
    

    2.2 HTML 设置使用缓存如下:

    
    
    
  2. 静态资源的缓存一般是在web服务器上配置的,常用的web服务器有:nginx、apache。具体的配置这里不做详细介绍,大家自行查阅。

三、HTTP 缓存的几个注意点

  1. 强缓存情况下,只要缓存还没过期,就会直接从缓存中读取数据,就算服务端有变化,也不会从服务端获取更新后的数据,这就就会导致无法获取到最新的数据。

    解决的办法有:在修改后的资源加上随机数,确保不会从缓存中读取。

    例如:
    http://www.example.com/common.css?v=110
    http://www.example.com/common.111.css

  2. 尽量减少 304 的请求,因为我们知道,协商缓存每次都会与后台服务器进行交互,所以性能上不是很好,从性能上来看尽量多使用强缓存。

  3. 在 Firefox 浏览器上,使用 Cache-Control: no-cache 是不生效的,其识别的是 no-store。这样能达到其他浏览器使用 Cache-Control: no-cache 的效果,所以为了兼容 Firefox 浏览器,经常会写成 Cache-Control: no-cache, no-store。

  4. 与缓存相关的几个 header 属性:Vary、Date / Age。

    Vary:
    Vary 本身是“变化”的意思,而在 HTTP 报文中更趋于是“vary from”(与。。。不同)的含义,它表示服务端会以什么基准字段来区分、筛选缓存版本。

    在服务端有着这么一个地址,如果是 IE 用户则返回针对 IE 开发的内容,否则返回另一个主流浏览器版本的内容。

    格式:Vary: User-Agent

    知会代理服务器需要以 User-Agent 这个请求首部字段来区分缓存版本,防止传递给客户端的缓存不正确。

    Date / Age:

    响应报文中的 Date 和 Age 字段:区分其收到的资源是否命中了代理服务器的缓存。

    Date 理所当然是原服务器发送该资源响应报文的时间(GMT格式),如果你发现 Date 的时间与“当前时间”差别较大,或者连续F5刷新发现 Date 的值都没变化,则说明你当前请求是命中了代理服务器的缓存。

    Age 也是响应报文中的首部字段,它表示该文件在代理服务器中存在的时间(秒),如文件被修改或替换,Age会重新由0开始累计。

相关内容

热门资讯

基金行业的“老谢” 基金行业的... 有些事情,来得总比预期得快。尽管很早就知道交银施罗德基金总经理谢卫今年要退休了,但看到他辞任总经理的...
黄牌警告撤销了,国资却笑不出来... *ST威帝申请撤销黄牌获得批准,6月4日起恢复为威帝股份,这本来是件值得高兴的事,不过,作为实控人的...
恒立液压大宗交易成交213.4... 恒立液压6月6日大宗交易平台出现一笔成交,成交量3.00万股,成交金额213.45万元,大宗交易成交...
鸿蒙版微信新功能爆棚,鸿蒙生态... 鸿蒙版微信,这款自2025年初在鸿蒙系统上线的国民级应用,每一次更新都牵动着广大用户的心弦。自1月9...
天风证券定增获证监会同意批复 ... 6月6日,天风证券(601162)发布公告称,收到中国证券监督管理委员会出具的《关于同意天风证券股份...
江苏定了!提高退休人员养老金,... 江苏定了!2025年继续提高退休人员养老金,农民基础养老金也要涨。日前,江苏省政府发布了《江苏省实施...
被说成是“影视公司”,众擎机器... 红星资本局6月7日消息,“前段时间我们和宇树被外界定义成‘影视公司’,没关系我觉得挺开心,影视也是行...
商务部:中欧双方电动汽车案价格... 红星资本局6月7日消息,今日,商务部新闻发言人就王文涛部长赴法国期间与欧盟委员会贸易和经济安全委员谢...
每周股票复盘:七彩化学(300... 截至2025年6月6日收盘,七彩化学(300758)报收于15.41元,较上周的15.46元下跌0....
独立管理的产品全部正收益,他是... 导读:在访谈博时基金田俊维之前,我们已经对他做了多年的跟踪。田俊维2024和2025连续两年入围我们...
上市金融科技公司一季度业绩飘红... 上市金融科技公司近日陆续交出一季度成绩单,业绩整体呈现向好态势。在政策驱动消费回暖的背景下,今年一季...
“吃不动”的桃李面包 吃不动的... 如何让消费者“吃得动”?“面包第一股”的增长剧本,为何正在急转直下?作为中国食品工业化的代表性样本,...
黄金,猛跌!机构:可能面临较大... 当地时间6月6日,因市场降低对美联储今年降息的押注,美国国债收益率和美元上涨, 国际金价下跌,纽约商...
中国海外发展:前5月销售额90... 6月6日,中国海外发展(00688.HK)发布未经审核运营数据,5月,中国海外系列公司的销售金额约2...
章俊:稳定币走出丛林 章俊近况... 章俊 系中国银河证券董事总经理、首席经济学家兼研究院院长、中国首席经济学家论坛理事核心观点加密货币里...
沈阳18栋别墅400万起拍,被... 红星资本局6月7日消息,近日,沈阳市苏家屯区的18栋别墅在阿里资产·司法页面进行拍卖,起拍价为399...
港口区“政银联动”创新年报服务... 为切实解决市场主体年报填报难题,近期,防城港市港口区市场监督管理局联合桂林银行开展“暖心服务进商户”...
上交所将推动上市公司加大分红力... 新华社北京6月7日电 《中国证券报》7日刊发文章《上交所将推动上市公司加大分红力度》。文章称,6月6...
搭乘脑机接口热点,股价涨停!炒... 本报(chinatimes.net.cn)记者张斯文 于娜 北京报道近日,马斯克的脑机接口公司Neu...
关税冲击供应链,露露乐蒙下调全... 当地时间6月5日,lululemon(露露乐蒙)发布2025财年第一季度财报,同步下调了全年业绩指引...
特斯拉股价收涨超3%:特朗普无... 特朗普与马斯克的“分手大战”走向扑朔迷离。从市场来看,情绪有所降温。当地时间6月6日收盘,特斯拉(N...
喜剧演员“贾冰”瘦到脱相?网友... 近日,#喜剧演员贾冰45天减去45斤瘦到脱相#的话题持续霸榜热搜!据了解,贾冰妻子在端午节晒出合照,...
新浪出手,10元盖饭“整顿”穷... 作者 |餐饮老板内参内参君“浪”来了餐饮行业,又迎来一位重磅“后浪”,“新浪”。去年中旬左右,一家名...
竞争激烈!66轮出价,这家IP... 竞价时长逾3小时。 6月6日,华龙证券1162.32万股二次司法拍卖落槌。此次拍卖起拍价1302万元...
审计委员会不可“当摆设”!中上... 21世纪经济报道记者雷晨 北京报道上市公司治理体系正持续优化。6月6日晚间,中国上市公司协会(下称“...
美日封锁崩了?国产“工业母机”... “没有我们的机床,中国工业就是一堆破铜烂铁。”日企工程师曾叫嚣。机床,又被称为“工业母机”,是半导体...
2025年A股“高考”卷来了!... 2025年A股市场招生全国统一考试考前须知以下选择题共15小题,每题10分,总分150分:评分标准参...
多地政府、高校密集出手,毕业生... 文/段修健5月30日,中央教育工作领导小组秘书组、教育部召开高校毕业生就业政策举措落实工作推进会。会...
西子电梯发讣告:董事长刘文超不... 针对“西子电梯总裁刘文超坠楼身亡”的消息,6月6日,西子电梯科技有限公司发讣告称,西子电梯科技有限公...
石头科技,宣布赴香港IPO,冲... A股上市公司、智能清洁机器人制造商石头科技(688169.SH)于6月6日发布公告称,为满足公司业务...