首页
/
每日頭條
/
生活
/
怎麼樣深度清除浏覽器緩存
怎麼樣深度清除浏覽器緩存
更新时间:2024-12-28 14:50:49

作為一名優秀前端的你是否還不清楚浏覽器的緩存機制?那麼此刻就請看看下面的内容吧~

浏覽器緩存是把雙刃劍,使用得當将極大提升你網頁的用戶體驗,反之則可能制造出pbug

一、浏覽器緩存是什麼

浏覽器緩存是為了加速浏覽,浏覽器在用戶磁盤或内存中對請求過的資源進行存儲,當用戶再次請求相同資源時,浏覽器就會從磁盤或内存中獲取緩存資源而不再向服務端請求,從而節省了網絡請求所花費的時間。

那麼是不是為了達到以上目的,就對資源無腦進行緩存呢?

不是的。比如服務器的資源更新了,但是由于緩存原因,用戶依舊使用的是緩存中的資源,這就會導緻用戶使用的資源不是最新的。

那麼接下來就需要詳細了解浏覽器的緩存流程和機制。

二、浏覽器緩存流程

首先,可以認為浏覽器中有這樣一張映射表,它存儲的是資源(和緩存信息等)與本地磁盤文件的關系。如下圖:

怎麼樣深度清除浏覽器緩存(五分鐘教會你浏覽器緩存的那些事兒)1

浏覽器緩存映射表

當浏覽器請求“https://xxxx/a.js”時,會先去映射表中查找是否有該資源的緩存信息,如果找到并且緩存時間未過期,那麼就從本地磁盤(或内存)中獲取緩存的資源(比如:C:\xxxx\a.js)。如果映射表中沒有請求資源的緩存信息,那麼就會向服務器請求資源,然後服務器會在響應頭中返回緩存規則給浏覽器,浏覽器再根據它決定是否緩存以及如何緩存該資源。

浏覽器第一次請求資源流程:

怎麼樣深度清除浏覽器緩存(五分鐘教會你浏覽器緩存的那些事兒)2

浏覽器第一次請求資源流程圖

問:上圖提到的“緩存規則”是什麼呢?

答:它的作用是告訴浏覽器對于該資源是否需要緩存,該如何緩存,緩存多長時間等操作。往下看[靈光一閃]

三、浏覽器緩存規則

浏覽器緩存規則主要有兩類:

  • 徹底緩存:expires、cache-control
  • 協商緩存:last-modified、etag

如下圖,是一個請求的響應頭(response headers),它就包含了徹底緩存和協商緩存所用到的字段信息。

怎麼樣深度清除浏覽器緩存(五分鐘教會你浏覽器緩存的那些事兒)3

請求的響應頭信息

什麼是徹底緩存

定義:隻要資源的緩存時間沒有過期,就從緩存中獲取,否則則從服務器獲取

依據:expires、cache-control

早在http1.0時期,使用的是expires字段來規定資源的過期時間,該時間是由服務器産生的絕對時間(GMT格式,如上圖所示),如果客戶端的時間小于該時間,那麼就使用緩存。但是我們都知道客戶端時間是可以手動修改的,這就會導緻可能緩存一直未使用。

為解決以上問題,從http1.1開始使用cache-control來規定徹底緩存規則,如下表所示其值和含義:

怎麼樣深度清除浏覽器緩存(五分鐘教會你浏覽器緩存的那些事兒)4

cache-control可選值和其含義

還記得“請求的響應頭信息”圖中有個"cache-control: max-age=2678400"嗎?它表示的就是從請求開始到該資源的緩存過期所經曆的秒數為2678400s。

當響應頭中同時含有expires和cache-control時,在使用緩存的判斷上後者的優先級要高于前者。

什麼是協商緩存

定義:請求未命中徹底緩存時,會向服務器發起請求,并在請求頭上攜帶該資源在緩存映射表中的etag和last-modified信息(如果存在的話)。然後浏覽器根據請求的響應狀态碼決定是否使用緩存。

依據:etag、last-modified

特點:不管資源有沒有修改,都會向服務器發起請求

etag:文件的唯一标識,隻要文件修改後,該值就會修改

last-modified:文件的最後修改時間

在第一次請求資源後,浏覽器會将響應中的緩存規則存入緩存映射表。在第二次請求時,如果未命中徹底緩存(比如:max-age過期了,cache-control值為no-cache或no-store),并且緩存信息中含有etag或last-modified信息,浏覽器就會在請求頭上對應的攜帶這樣兩個信息:if-none-match: W/"98e1-lY6zj2gtniVAqQ203cSuog"if-modified-since: Fri, 25 Jun 2021 16:03:41 GMT

服務器就會根據這些值和最新的資源所産生的etag和last-modified值做對比,如果發現不相同,則返回最新資源和最新的etag或last-modified,浏覽器将新的緩存規則更新到映射表中。反之則返回304狀态碼,浏覽器就使用緩存數據。

問:為什麼需要etag呢?有了last-modified不就可以了麼?

答:其實主要有兩個原因,第一,有時候文件的内容并未修改,僅僅改變了其修改時間,這時其實還是可以使用緩存的。第二,如果文件修改很頻繁,并且頻率在秒級以下,從“請求的響應頭信息”圖可發現last-modified精度隻能到秒。所以if-modified-since隻能感知秒級的修改。所以etag的存在還是很有必要的。

提示:etag的優先級會高于last-modified

總結

我們用一張流程圖來概括以上所講的浏覽器緩存機制:

怎麼樣深度清除浏覽器緩存(五分鐘教會你浏覽器緩存的那些事兒)5

浏覽器緩存流程圖

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
小号的發音技巧
小号的發音技巧
對于小号初學者來講,發音是非常重要的一個環節。在發音前,一定要做好氣息和口型的準備,這樣也不一定會馬上發出聲音,所以要有足夠的耐心,等待它發出自然、松弛的聲音(也許是一天,也許是十天記住,要耐心地等待)。切記,不要使勁吹響,這樣雖然很容易發...
2024-12-28
李雲迪獲過最高獎項
李雲迪獲過最高獎項
現在國内比較知名的鋼琴家有郎朗,孔祥東,李雲迪,劉詩昆等。在80後音樂鋼琴家中,最具有代表性的兩位就是郎朗和李雲迪。兩人因為同是鋼琴家,又年齡一樣大,很多網友會好奇,誰的名氣會更大一點?在這方面,郎朗要強一點。自從今年與同為鋼琴家的吉娜·愛...
2024-12-28
禮物紙盒底部折法
禮物紙盒底部折法
山口真·禮品包裝(`・ω・´)ノ今天教你用一個套路折出一系列超實用的禮品包裝建議使用15cm以上稍硬的正方形紙制作~,
2024-12-28
白糖面包怎麼做
白糖面包怎麼做
白糖面包怎麼做?10克面粉,50克水,250克高筋面粉,60克白糖,2.5克酵母,10克奶粉,1.5個雞蛋,15克水,10克色拉油,下面我們就來說一說關于白糖面包怎麼做?我們一起去了解并探讨一下這個問題吧!白糖面包怎麼做10克面粉,50克水...
2024-12-28
浙江省一段線二段線什麼意思
浙江省一段線二段線什麼意思
浙江省一段線二段線什麼意思?一段線類似本科錄取控制線,在一段線上的考生可以在常規批首先填報普通類本科志願這是高考填報志願最重要的一環,依靠高考成績進入本科院校,我來為大家科普一下關于浙江省一段線二段線什麼意思?以下内容希望對你有幫助!浙江省...
2024-12-28
Copyright 2023-2024 - www.tftnews.com All Rights Reserved