由淺入深地講清楚瀏覽器緩存

一、什么是瀏覽器緩存?(入門級)

1. 瀏覽器緩存的定義

瀏覽器緩存就是:瀏覽器把之前請求過的資源保存起來,下次訪問同樣的資源時可以直接用本地副本,而不是重新請求服務器。

舉個生活例子

  • 你第一次去咖啡店買咖啡(訪問網頁)
  • 店員記住了你的訂單(瀏覽器緩存資源)
  • 你下次來時,店員直接把咖啡給你,不用重新制作(直接用緩存)

2. 瀏覽器緩存的作用

  1. 加快訪問速度(本地讀取比網絡快得多)
  2. 減少流量消耗(尤其移動端用戶體驗更好)
  3. 降低服務器壓力(減少重復請求)

面試官問:

瀏覽器緩存的作用和好處是什么?

你可以答:

它可以減少網絡請求、提高頁面加載速度,并降低服務器壓力。


二、瀏覽器緩存的分類(核心概念)

瀏覽器緩存分為兩大類:

1?? 強緩存(強制緩存)

  • 特點:瀏覽器直接使用本地緩存,不請求服務器。

  • 觸發條件

    • 服務器在響應頭里設置了:

      • Cache-Control: max-age=秒數
      • 或舊版本 Expires: 絕對時間
  • 表現

    • 瀏覽器控制臺 Status 顯示 200 (from disk/memory cache)

例子

HTTP/1.1 200 OK
Cache-Control: max-age=31536000

2?? 協商緩存(對比緩存)

  • 特點:瀏覽器會先問服務器:

    “我本地有緩存,你那邊更新過嗎?”

  • 流程

    1. 瀏覽器帶上緩存標識(If-Modified-SinceIf-None-Match

    2. 服務器對比:

      • 如果沒更新 → 返回 304 Not Modified,瀏覽器用本地緩存
      • 如果更新了 → 返回新資源,狀態碼 200
  • 相關響應頭

    • Last-Modified / If-Modified-Since
    • ETag / If-None-Match

3?? 優先級總結

  • 瀏覽器訪問資源的順序:

    先檢查強緩存 → 命中直接用本地↓否則檢查協商緩存↓再決定請求新資源
    

一句話記憶

強緩存不發請求,協商緩存要問服務器。


三、瀏覽器緩存的實際應用(進階)

在真實開發中,不同資源適合不同緩存策略:

1. 靜態資源(JS、CSS、圖片)

  • 策略:強緩存 + 文件名 hash

  • 原因

    • 這些文件內容很少改
    • 文件名帶 hash,更新后瀏覽器會認為是新文件

示例

app.91a2d3.js
Cache-Control: max-age=31536000

2. HTML 文件

  • 策略:協商緩存或短期緩存

  • 原因

    • HTML 更新頻繁,不能強緩存太久,否則用戶看不到最新版本
  • 示例

    Cache-Control: no-cache
    ETag: "page12345"
    

3. 接口請求(API 數據)

  • 策略

    • 經常變動的數據 → 禁用緩存或加時間戳
    • 穩定數據(城市列表、字典表)→ 協商緩存或自定義緩存邏輯

示例

fetch(`/api/user?id=1&_=${Date.now()}`) // 防止緩存

四、瀏覽器緩存相關的面試高頻題(核心)

面試官最喜歡問這些:

  1. 瀏覽器緩存有哪些類型?

    • 強緩存(Cache-Control / Expires
    • 協商緩存(ETag / Last-Modified
  2. 強緩存和協商緩存的區別?

    • 強緩存命中 → 不發請求
    • 協商緩存命中 → 發請求但返回 304
  3. Cache-Control 常見指令?

    • max-age:緩存時長(秒)
    • no-cache:不直接用緩存,需要協商
    • no-store:完全禁用緩存
    • immutable:資源永遠不會變(適合版本化靜態資源)
  4. ETag 和 Last-Modified 區別?

    • Last-Modified:按最后修改時間判斷
    • ETag:按文件內容 hash 判斷,精度更高
  5. 實際開發如何設計緩存策略?

    • 靜態資源:強緩存 + hash
    • HTML:協商緩存
    • 接口:按業務決定緩存策略

五、答題模板(背會就能面)

如果面試官問:

講一下瀏覽器緩存原理?

你可以這樣答:


① 先分類

瀏覽器緩存分為兩類:強緩存和協商緩存。
強緩存命中時直接使用本地緩存,不發請求。
協商緩存會向服務器確認資源是否更新,如果未更新返回 304。

② 說明原理

瀏覽器先查強緩存(Cache-Control / Expires),
命中直接用本地;
否則走協商緩存(ETag / Last-Modified),
服務器確認沒更新則返回 304,否則返回新資源。

③ 再講應用場景

實際開發中:

  • 靜態資源(JS、CSS、圖片)用強緩存 + 文件 hash
  • HTML 頁面用協商緩存
  • 接口數據根據業務選擇緩存或加時間戳避免緩存

④ 強調好處

這樣能顯著提升頁面性能、減少帶寬和服務器壓力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91793.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91793.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91793.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux I/O 多路復用機制對比分析:poll/ppoll/epoll/select

Linux I/O 多路復用機制對比分析:poll/ppoll/epoll/select 1. 概述 I/O 多路復用是現代高性能網絡編程的核心技術,它允許單個線程同時監視多個文件描述符的狀態變化,從而實現高效的并發處理。Linux 提供了多種 I/O 多路復用機制&#xff0c…

高防服務器租用:保障數據安全

您的網絡速度是否卡頓,業務是否經常受到網絡攻擊的威脅呢?別擔心,高防服務器租用能夠幫助你解決這些困擾!高防服務器租用擁有著卓越的防御能力,可以幫助企業抵御各種網絡攻擊,能夠輕松化解各種超大流量的網…

基于python多光譜遙感數據處理、圖像分類、定量評估及機器學習方法應用

基于衛星或無人機平臺的多光譜數據在地質、土壤調查和農業等應用領域發揮了重要作用,在地質應用方面,綜合Aster的短波紅外波段、landsat熱紅外波段等多光譜數據,可以通過不同的多光譜數據組合,協同用于礦物信息有效提取。第一&…

CSS content-visibility:提升頁面渲染性能的 “智能渲染開關”

在前端開發中,你是否遇到過這樣的問題:頁面包含大量 DOM 元素(如長列表、復雜表格)時,滾動變得卡頓,交互響應遲緩?這往往是因為瀏覽器需要不斷渲染屏幕外的元素,浪費了大量計算資源。…

Javascript面試題及詳細答案150道之(016-030)

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

仿真電路:(十七下)DC-DC升壓壓電路原理簡單仿真

1.前言 升壓的環境用的沒降壓的多,但是升壓會用在LED的很多電路上,所以理解一下原理 2.DC-DC升壓原理簡單仿真 升壓原理 下面還是對升壓進行簡單的仿真 拓撲結構以及原理和降壓還是很相似的,只是位置不太一樣,過程推導就不推導…

ros2--source

setup腳本類型 install下面會有幾個setup.xxx的shell腳本。 setup.bash setup.ps1 setup.sh setup.zsh 什么區別呢 文件名 Shell 類型 適用場景 setup.bash Bash (Linux/macOS) 標準 Linux/macOS 終端(默認使用) setup.sh 通用 Shell 兼容性更廣,但功能可能受限 setu…

40.MySQL事務

1.事務的作用事務用于保證數據的一致性,它由一組相關的 dml (update delete insert) 語句組成,該組的 dml (update delete insert) 語句要么全部成功,要么全部失敗。如:轉賬就要用事務來處理,用以保證數據的一致性。假…

java導入pdf(攜帶動態表格,圖片,純java不需要模板)

java導出pdf文件一、介紹二、準備三、實現效果四、代碼一、介紹 上一篇文章(java使用freemarker操作word(攜帶動態表格,圖片))https://blog.csdn.net/weixin_45853881/article/details/129298494 緊跟上文&#xff0c…

【dropdown組件填坑指南】鼠標從觸發元素到下拉框中間間隙時,下拉框消失,怎么解決?

開發dropdown組件填坑之hideDelay 引言 在開發下拉菜單(dropdown)或彈出框(popover)組件時,一個常見的用戶體驗問題就是鼠標移出觸發區域后,彈出內容立即消失,這會導致用戶無法移動到彈出內容上…

Linux I/O 函數完整清單

Linux I/O 函數完整清單 1. 基礎 I/O 函數 1.1 基本讀寫 #include <unistd.h>ssize_t read(int fd, void *buf, size_t count); ssize_t write(int fd, const void *buf, size_t count);1.2 位置指定讀寫 #include <unistd.h>ssize_t pread(int fd, void *buf, siz…

面經——電子電路技術知識詳解

電子電路技術知識詳解 目錄 德摩根定律周期性矩形波產生方法自激振蕩器原理與設計晶體管溫度效應分析反向飽和電流影響因素放大電路負反饋類型判斷正弦波90相移電路直接耦合放大器的缺點二階有源低通濾波器分析開關電源與線性電源對比 德摩根定律 德摩根定律&#xff08;De …

docker 安裝 gitlab

null文章瀏覽閱讀445次。問題&#xff1a;運行 docker run hello-world 報錯。原因&#xff1a;原鏡像源網絡不穩定。https://blog.csdn.net/sszdzq/article/details/145733419 鏡像獲取 在線下載 docker pull gitlab/gitlab-ce:17.11.1-ce.0 離線獲取 創建運行 sudo docke…

PHP中的日期/時間處理之Carbon組件

日常開發中&#xff0c;我們會經常用到日期和時間的操作&#xff0c;但官方的一般操作比較復雜&#xff0c;需要大量的時間進行格式化問題和大量計算等等。Carbon組件 可以幫助我們在 PHP 開發中處理日期/時間變得更加簡單、更語義化&#xff0c;從而使得我們的代碼更容易閱讀和…

學習嵌入式第十八天

文章目錄1.數據結構1.概念2.衡量代碼質量和效率1.時間復雜度2.空間復雜度3.數據結構分類1.邏輯結構2.存儲結構3.常見的數據結構2.鏈表1.與順序表的區別2.鏈表分類1.單向鏈表1.定義鏈表節點類型2.空鏈表的創建3.鏈表的頭插法4.鏈表的遍歷5.鏈表元素刪除3.makefile習題1.數據結構…

基于SpringBoot+Vue實現校園商鋪系統

作者主頁&#xff1a;編程指南針 作者簡介&#xff1a;Java領域優質創作者、CSDN博客專家 、CSDN內容合伙人、掘金特邀作者、阿里云博客專家、51CTO特邀作者、多年架構師設計經驗、多年校企合作經驗&#xff0c;被多個學校常年聘為校外企業導師&#xff0c;指導學生畢業設計并參…

從資源閑置到彈性高吞吐,JuiceFS 如何構建 70GB/s 吞吐的緩存池?

AI 模型的訓練與推理對存儲系統提出了極為嚴苛的要求&#xff0c;特別是在高吞吐、高并發以及對海量小文件的高效處理方面&#xff0c;已成為三大主要挑戰。盡管基于 Lustre 或 GPFS 的并行文件系統具備出色的性能&#xff0c;但其成本高昂、吞吐能力與容量強耦合&#xff0c;可…

提升JVM性能之CMS垃圾回收器的優化分析與案例剖析

這里寫目錄標題一、CMS基本介紹二、CMS核心優化策略1. 避免并發模式失敗&#xff08;Concurrent Mode Failure&#xff09;2. 減少內存碎片3. 調優并發階段耗時4. 新生代優化配合三、典型案例解析案例1&#xff1a;電商服務頻繁Full GC案例2&#xff1a;金融交易系統碎片導致長…

Token系列 - 再談穩定幣

相關政策 2024年12月&#xff0c;歐洲《加密資產市場監管法案》正式成為法律2025年3月&#xff0c;日本細化了加密資產及穩定幣的監管調整2025年5月&#xff0c;英國發布了關于穩定幣發行、加密資產托管及加密資產公司財務穩健性的監管提案&#xff1b;2025年5月20日&#xff…

【20min 急速入門】使用Demucs進行音軌分離

創建環境 conda create --name mujica python3.10下載加速依賴 先用nvidia-smi檢查機器使用的獨顯版本, 然后從pytorch官網下載對應的GPU版torch, torchaudio 比如我的是12.2, 就下載11.8版本的 pip3 install torch torchvision torchaudio --index-url https://download.p…