当前位置: 首页 > news >正文

浏览器缓存策略

浏览器请求资源时的缓存策略核心是:默认优先查缓存(所有资源都遵循,不止图片),是否重新获取取决于「缓存规则(HTTP 头)」和「刷新方式」 —— 图片、JS、CSS、字体等静态资源缓存命中概率高(因为更新频率低),而 HTML、接口数据等动态资源缓存策略更严格,但本质都遵循同一套缓存逻辑。

下面分两部分讲清楚:先回答 “什么时候优先查缓存”,再重点解决 “刷新页面时是否用缓存”。

一、什么时候浏览器会首先访问缓存?(核心规则)

浏览器对所有资源(图片、JS、CSS、HTML、接口等) 都会优先查缓存,除非触发 “强制不缓存” 条件。关键判断逻辑是:

  1. 资源是否被缓存过:浏览器首次请求资源时,会把资源和对应的「缓存规则」(HTTP 响应头)存在本地(内存缓存 / 磁盘缓存);后续请求时,先检查本地是否有缓存。
  2. 缓存是否有效:根据缓存规则判断缓存是否 “过期”,若未过期则直接用缓存(不发网络请求),若过期则发起 “验证请求”(问服务器资源是否更新)。
关键缓存规则(HTTP 头):决定是否优先用缓存
  • 强缓存(优先级最高):响应头带 Cache-Control: max-age=3600(资源 1 小时内有效)或 Expires: 未来时间,浏览器直接用缓存,不发任何网络请求(控制台显示 200 OK (from disk cache) 或 from memory cache)。
    • 适用场景:图片、JS、CSS 等静态资源(打包时加哈希值,更新时哈希变,自动失效)。
  • 协商缓存:响应头带 Last-Modified: 文件最后修改时间 或 ETag: 文件唯一标识,缓存过期后,浏览器发请求带 If-Modified-Since 或 If-None-Match 问服务器:“资源变了吗?”
    • 服务器说 “没变化”(响应 304 Not Modified):浏览器用缓存;
    • 服务器说 “变了”(响应 200 OK 带新资源):更新缓存并使用新资源。
    • 适用场景:HTML、频繁更新的接口数据。
  • 不缓存:响应头带 Cache-Control: no-cache(每次都发协商请求)或 Cache-Control: no-store(不存缓存,每次都重新下载)。
    • 适用场景:登录状态、实时数据(如股票行情)。
结论:
  • 只要资源被缓存过且缓存有效,浏览器一定优先用缓存(不管资源类型是图片还是 JS);
  • 图片等静态资源常用「强缓存」,所以看起来 “总是读缓存”;而 HTML 常用「协商缓存」,所以刷新时可能会发验证请求,但不一定重新下载。

二、刷新页面时,是访问缓存还是重新获取?(分 3 种刷新方式)

这是最容易混淆的点:不同刷新方式会改变缓存策略,核心区别是 “是否忽略强缓存”。

先明确 3 种常见刷新操作(以 Chrome 为例):

刷新方式操作方式缓存策略(核心:是否忽略强缓存)实际表现(以图片 / JS 为例)
正常刷新(普通访问)点击地址栏回车、点链接跳转不忽略强缓存,遵循原有缓存规则缓存未过期:用缓存(200 from cache);过期:发协商请求
手动刷新(刷新按钮 / F5)点击刷新图标、按 F5忽略强缓存,直接走协商缓存不管强缓存是否过期,都发验证请求(304 或 200)
强制刷新(Ctrl+F5)按住 Ctrl+F5、Ctrl+Shift+R忽略所有缓存(强缓存 + 协商缓存)每次都重新下载资源(响应 200 OK,不读本地缓存)
举个具体例子(图片资源,强缓存 max-age=3600):
  1. 首次访问:下载图片,缓存到本地(磁盘);
  2. 10 分钟后正常刷新(地址栏回车):强缓存未过期,直接用缓存(不发网络请求);
  3. 2 小时后手动刷新(F5):强缓存已过期,发协商请求(服务器返回 304,用缓存);
  4. 此时按 Ctrl+F5:忽略所有缓存,重新下载图片(响应 200,更新缓存)。
补充:为什么刷新 HTML 和图片表现不一样?
  • 图片:通常配置强缓存(max-age=86400 即 1 天),所以正常刷新时优先用缓存;
  • HTML:通常配置协商缓存(Cache-Control: no-cache),所以即使正常刷新,也会发验证请求(确认 HTML 是否更新),但不会每次都重新下载(只有 HTML 变了才下载)。

三、常见误区澄清

  1. 误区:“只有图片会读缓存,JS/CSS 不会”错。JS、CSS、字体等静态资源默认都走强缓存(和图片一样),只是开发时可能因为 “未加哈希值” 导致缓存更新问题,让人误以为 “不读缓存”。

  2. 误区:“刷新页面就会重新下载所有资源”错。只有 Ctrl+F5 才会忽略所有缓存;F5 只是忽略强缓存,走协商缓存(大部分资源会返回 304,复用缓存)。

  3. 误区:“浏览器缓存只存在磁盘里”错。有两种缓存:

    • 内存缓存(from memory cache):临时存储,关闭浏览器就消失(如小图片、常用 JS);
    • 磁盘缓存(from disk cache):持久化存储,关闭浏览器后仍存在(如大图片、不常用资源)。
    • 正常刷新时,优先读内存缓存,内存没有再读磁盘缓存。

总结核心逻辑

  1. 所有资源都遵循 “优先查缓存” 原则,是否用缓存取决于「HTTP 缓存规则」(强缓存 / 协商缓存);
  2. 图片等静态资源因常用强缓存,所以 “看起来总是读缓存”,动态资源(HTML / 接口)因缓存策略更严格,可能会发验证请求;
  3. 刷新方式决定是否忽略缓存:
    • 正常刷新:遵循缓存规则(优先用有效缓存);
    • F5 刷新:忽略强缓存,走协商缓存;
    • Ctrl+F5:忽略所有缓存,重新下载。

如果想验证,可打开 Chrome F12→Network,勾选「Disable cache」(禁用缓存)模拟 Ctrl+F5,或观察「Size」列(显示 from disk cache 就是用了缓存)。

http://www.dtcms.com/a/587412.html

相关文章:

  • 北京网络公司网站莱芜信息平台
  • 重庆企业公司网站建设公司网站域名怎么注册
  • 阿里云网站托管南宁市网站开发公司
  • discuz仿搜索网站企业网站建设ppt介绍
  • 跑腿网站建设哪里搜索引擎优化好
  • 高校思政专题网站建设ps做网站一般用多大字体
  • XLOOKUP:集 VLOOKUP 与 INDEX+MATCH 于一身的终极查找函数
  • 网站推广主要方法苏州二建建筑集团有限公司
  • 3.String、StringBuilder、StringBuffer:性能差别多大?
  • 输入框无法onChange两种解决思路
  • 网站建设服务商都有哪些网站建设哪个公司比较好
  • 个人网站效果企业网站建设代理加盟
  • 网站班级文化建设三只松鼠的网站建设
  • 35网站建设深圳建筑协会
  • 上海设立企业网站中山做网站推广公司
  • 想学学做网站网站建设与维护税率
  • 薛城网站建设可视网站开发工具
  • 徐州市经济技术开发区建设局网站wordpress md5工具
  • 比较好的做网站的公司郑州seo顾问阿亮
  • 厦门网站建设有哪些公司wordpress博客怎么用
  • 郑州服装 网站建设专业的东莞网站排名
  • 中国网站建设的利弊建设英文网站的必要性
  • 有域名了如何自己做网站浪漫的html表白源代码
  • 五金机械设备网站模板建设北京做网站建设
  • 房管局备案查询网站表情包做旧网站
  • 珠宝网站建设平台分析报告360建筑网这家公司怎么样
  • 轮转数组——深度解剖逆转算法的奥秘
  • 外贸网站建设 义乌wordpress 3.9.1
  • 网站开发包含网站维护吗网站建设可行性分析报告模板
  • 广东企业网站seo点击软件意大利设计网站