WHAT - 缓存命中 Cache Hit 和缓存未命中 Cache Miss

文章目录

  • 一、什么是缓存命中?
  • 二、前端开发要知道哪些缓存机制(以及命中条件)?
    • 1. 浏览器缓存(主要针对静态资源)
      • 常见的缓存位置
      • 关键 HTTP 头字段(决定命中与否)
    • 2. 前端应用层缓存(例如数据请求)
  • 三、前端开发者需要掌握哪些实践?
    • 浏览器缓存策略实战建议
    • 数据缓存建议
  • 四、如何判断资源是否命中缓存?
  • 五、缓存未命中
  • 总结

作为前端开发者,理解 缓存命中(Cache Hit) 非常重要,尤其在你处理性能优化、资源加载、用户体验提升、离线支持等方面。

一、什么是缓存命中?

缓存命中(Cache Hit) 指当你请求某个资源(比如图片、JS 文件、API 响应等)时,浏览器或其他中间层发现缓存中已有该资源,于是直接返回缓存结果,而不需要再去网络请求。

这样做有两个好处:

  • 提升加载速度:从缓存读取远比从网络拉取快得多。
  • 减少服务器压力:命中缓存后不发起请求,减轻后端负担。

二、前端开发要知道哪些缓存机制(以及命中条件)?

前端缓存机制主要分为两大类:浏览器缓存(静态资源)应用层缓存(数据、状态)

1. 浏览器缓存(主要针对静态资源)

常见的缓存位置

  • 内存缓存(Memory Cache):短期缓存,刷新页面即失效。
  • 磁盘缓存(Disk Cache):持久性更强,关闭浏览器后依然有效。
  • Service Worker 缓存:你控制的离线缓存,可以精细化管理。
  • Push Cache(HTTP/2):很短暂,针对同一次会话的缓存。

关键 HTTP 头字段(决定命中与否)

字段作用示例
Cache-Control控制是否缓存、缓存时长max-age=3600, no-cache
ETag内容标识符,用于比较是否更新ETag: "abc123"
Last-Modified上次修改时间Last-Modified: Wed, 01 May 2024 12:00:00 GMT
Expires绝对过期时间(已被 Cache-Control 替代)Expires: Tue, 21 May 2025 08:00:00 GMT

命中机制简化流程:

  1. 浏览器请求资源。

  2. 如果缓存未过期(如 max-age 生效) → 强缓存命中(直接使用缓存)。

  3. 如果缓存过期 → 浏览器发送带上 If-None-Match(对比 ETag)或 If-Modified-Since(对比修改时间)。

    • 若内容没变,服务器返回 304 Not Modified协商缓存命中
    • 否则重新返回新资源。

2. 前端应用层缓存(例如数据请求)

用于缓存 API 请求或状态数据,例如:

  • localStorage / sessionStorage:持久化存储。
  • IndexedDB:复杂结构、本地数据库。
  • 前端框架内缓存:如 React Query、SWR、Apollo Client 等。

例如在 SWR 中,数据缓存命中机制基于 key-valuerevalidation 策略

const { data } = useSWR('/api/user', fetcher)
  • 再次访问相同 key(URL)→ 命中缓存。
  • 根据配置决定是否 revalidate(重新请求)。

三、前端开发者需要掌握哪些实践?

浏览器缓存策略实战建议

  • 设置合理的 Cache-Control

    • JS/CSS 设置长时间缓存:Cache-Control: public, max-age=31536000, immutable
    • HTML 页面设置短时间缓存 + 协商缓存:no-cache
  • 使用文件哈希名作为缓存破坏手段(Cache Busting)

    • 比如:main.3f3c1f.js,文件变了名字也变了,浏览器会重新加载。
  • 服务端正确返回 ETag/Last-Modified

    • 保证协商缓存生效,减少带宽开销。

数据缓存建议

  • 用 SWR、React Query 等库管理 API 缓存。
  • 配合缓存时间和 revalidation 策略(如 stale-while-revalidate)。
  • 结合 localStorage / IndexedDB 实现离线缓存支持。

四、如何判断资源是否命中缓存?

打开浏览器开发者工具(DevTools):

  1. 刷新页面

  2. Network 面板查看请求

  3. StatusSize 列:

    • 200 (from disk cache):磁盘缓存命中
    • 200 (from memory cache):内存缓存命中
    • 304 Not Modified:协商缓存命中

五、缓存未命中

缓存未命中(Cache Miss) 是指在系统尝试从缓存中读取数据时,未找到所需数据,因此需要从更慢的存储介质(比如内存或硬盘)中加载数据的情况。

这会导致访问延迟增加,是性能优化中需要重点关注的问题。

缓存未命中通常分为以下几种类型:

  1. 强制未命中(Compulsory Miss)

    • 也叫冷启动未命中,是指某个数据首次被访问时,由于之前从未加载过,所以缓存中自然没有,必须从原始数据源加载。
  2. 容量未命中(Capacity Miss)

    • 缓存容量不足,无法容纳所有活跃数据,因此部分数据被替换,后续访问这些数据时就会发生未命中。
  3. 冲突未命中(Conflict Miss)

    • 组相联缓存直接映射缓存中,不同的数据映射到了同一个缓存位置,导致彼此竞争位置并被替换,从而造成未命中。

举个例子:假设你打开了一个网页,网页上的某张图片之前没有加载过——这时候浏览器会从服务器下载图片并缓存起来。这就是强制未命中。下次你再次访问该页面,如果缓存被清除或图片被替换掉了,再加载时就可能是容量未命中冲突未命中

总结

缓存命中是前端性能优化的核心手段之一,理解浏览器缓存机制、合理配置 HTTP 头信息、结合应用层缓存工具,可以极大提升用户体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/83288.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10 个可靠的 Android 文件传输应用程序

Android 文件传输是 Android 用户的常见需求。我们经常需要将文件从一台 Android 设备传输到 PC 或 Mac。但我们怎样才能做到这一点呢?俗话说,工欲善其事,必先利其器。因此,首先了解 10 个锋利的 Android 文件传输应用程序&#x…

AlphaEvolve:LLM驱动的算法进化革命与科学发现新范式

AlphaEvolve:LLM驱动的算法进化革命与科学发现新范式 本文聚焦Google DeepMind最新发布的AlphaEvolve,探讨其如何通过LLM与进化算法的结合,在数学难题突破、计算基础设施优化等领域实现革命性进展。从48次乘法优化44矩阵相乘到数据中心资源利…

Java大师成长计划之第24天:Spring生态与微服务架构之分布式配置与API网关

📢 友情提示: 本文由银河易创AI(https://ai.eaigx.com)平台gpt-4-turbo模型辅助创作完成,旨在提供灵感参考与技术分享,文中关键数据、代码与结论建议通过官方渠道验证。 在微服务架构中,如何管理…

eSwitch manager 简介

eSwitch manager 的定义和作用 eSwitch manager 通常指的是能够配置和管理 eSwitch(嵌入式交换机)的实体或接口。在 NVIDIA/Mellanox 的网络架构中,Physical Function(PF)在 switchdev 模式下充当 eSwitch manager&am…

最新开源 TEN VAD 与 Turn Detection 让 Voice Agent 对话更拟人 | 社区来稿

关键词:对话式 AI | 语音智能体 | Voice Agent | VAD | 轮次检测 | 声网 | TEN GPT-4o 所展示对话式 AI 的新高度,正一步步把我们在电影《Her》中看到的 AI 语音体验变成现实。AI 的语音交互正在变得更丰富、更流畅、更易用,成为构建多模态智…

AI实践用例---日程规划(通用日程管理文件ICS)灵感踩坑日常

我是一位践行独立开发者之路的菜鸟开发者。 由于执行力较差,常常有很多想法但是很多时候没有去践行。 所以我有了让大模型为我生成日程安排的想法,这确实可以,很简单。只需要将你的想法告诉ai就行了。 例如: 发给AI的提示词: 我想你帮我对,嗯,未来的一年做一个嗯,大…

大疆无人机​​DRC 链路

在大疆上云API中,​​DRC 链路​​通常指 ​​Device-Cloud Remote Control Link(设备-云端远程控制链路)​​,它是无人机(或设备)与云端服务之间建立的​​实时控制与数据传输通道​​,用于实现…

tomcat一闪而过,按任意键继续以及控制台中文乱码问题

问题描述 今天在打开tomcat,启动startup.bat程序时 tomcat直接闪退,后面查找资料后发现,可以通过编辑startup.bat文件内容,在最后一行加入pause即可让程序不会因为异常而终止退出 这样方便查看tomcat所爆出的错误: 然后,我明确看到我的tomcat启动程序显示如下的内容,没有明确…

中大型水闸安全监测系统解决方案

一、方案概述 中大型水闸作为水利工程的重要组成部分,承担着调节水位、控制水流、防洪排涝等多重功能,在防洪减灾、水资源配置、生态环境改善等方面发挥着巨大作用。然而,由于历史原因,许多水闸存在建设标准偏低、质量较差、配套设…

轨迹误差评估完整流程总结(使用 evo 工具)

roslaunch .launch rosbag play your_dataset.bag -r 2.0 ✅ 第二步:录制估计轨迹 bash 复制编辑 rosbag record -O traj_only.bag /aft_mapped_to_init 运行一段时间后 CtrlC 停止,生成 traj_only.bag 第三步:提取估计轨迹和真值轨迹为…

Linux任务管理与守护进程

目录 任务管理 jobs,fg,bg 进程组概念 任务概念 守护进程 守护进程的概念 守护进程的查看 守护进程的创建 ​编辑模拟实现daemon函数 任务管理 每当有一个用户登录Linux时,系统就会创建一个会话(session) 任何…

Json rpc 2.0比起传统Json在通信中的优势

JSON-RPC 2.0 相较于直接使用传统 JSON 进行通信,在协议规范性、开发效率、通信性能等方面具有显著优势。以下是核心差异点及技术价值分析: 一、结构化通信协议,降低开发成本 传统 JSON 通信需要开发者自定义数据结构和处理逻辑,…

机器学习与人工智能:NLP分词与文本相似度分析

DIY AI & ML NLP — Tokenization & Text Similarity by Jacob Ingle in Data Science Collective 本文所使用的数据是在 Creative Commons license 下提供的。尽管我们已尽力确保信息的准确性和完整性,但我们不对数据的完整性或可靠性做任何保证。数据的使…

RK3568平台OpenHarmony系统移植可行性评估

https://docs.openharmony.cn/pages/v5.0/zh-cn/device-dev/quick-start/quickstart-appendix-compiledform.md 官方给的标准系统就是RK3568, 所以肯定可以, 关于硬件加速部分 看了鸿蒙RK3568开发板的GPU编译配置,只能说能用 https://docs.openharmony.cn/pages/v4.1/zh-cn/…

论文浅尝 | HOLMES:面向大语言模型多跳问答的超关系知识图谱方法(ACL2024)

笔记整理:李晓彤,浙江大学硕士,研究方向为大语言模型 论文链接:https://arxiv.org/pdf/2406.06027 发表会议:ACL 2024 1. 动机 多跳问答(Multi-Hop Question Answering, MHQA)技术近年来在自然语…

机器学习中的特征工程:解锁模型性能的关键

在机器学习领域,模型的性能往往取决于数据的质量和特征的有效性。尽管深度学习模型在某些任务中能够自动提取特征,但在大多数传统机器学习任务中,特征工程仍然是提升模型性能的关键环节。本文将深入探讨特征工程的重要性、常用方法以及在实际…

Kotlin与Java的融合趋势:从互操作到云原生实践

在2025年的软件开发领域,Kotlin和Java作为JVM生态的支柱语言,展现出强大的协同能力。Kotlin以其简洁的语法和现代特性迅速崛起,而Java凭借其成熟生态和稳定性依然占据主导地位。通过两者的融合,我们的实时聊天系统将开发效率提升了…

Python生成器:高效处理大数据的秘密武器

生成器概述 生成器是 Python 中的一种特殊迭代器,通过普通函数的语法实现,但使用 yield 语句返回数据。生成器自动实现了 __iter__() 和 __next__() 方法,因此可以直接用于迭代。生成器的核心特点是延迟计算(lazy evaluation&…

Flask框架入门与实践

Flask框架入门与实践 Flask是一个轻量级的Python Web框架,以其简洁、灵活和易于上手的特点深受开发者喜爱。本文将带您深入了解Flask的核心概念、基本用法以及实际应用。 什么是Flask? Flask是由Armin Ronacher于2010年开发的微型Web框架。与Django等…

数学复习笔记 14

前言 和家里人交流了一下,他们还是希望我全力以赴初试,我确实也得放开了干,不要束手束脚的。好好加油。感觉公共课都没有啥压力,主要是专业课要好好加油,真不能过不了线,要是过不了线,啥都白搭…