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.pswp.cn/diannao/83288.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83288.shtml
英文地址,請注明出處:http://en.pswp.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

前言 和家里人交流了一下,他們還是希望我全力以赴初試,我確實也得放開了干,不要束手束腳的。好好加油。感覺公共課都沒有啥壓力,主要是專業課要好好加油,真不能過不了線,要是過不了線,啥都白搭…