瀏覽器緩存策略

?。。。∽约簩W(xué)習(xí)理解用,僅供參考?。。。?/h3>

瀏覽器緩存策略分為兩種 強(qiáng)緩存(本地緩存) 和 協(xié)商緩存(弱緩存)。
瀏覽器在發(fā)請(qǐng)求前,先檢查強(qiáng)緩存,若沒有需要的內(nèi)容(未命中),則發(fā)起請(qǐng)求判斷是否需要用弱緩存。

1、簡(jiǎn)單的概括

強(qiáng)緩存是不發(fā)起請(qǐng)求,直接使用緩存內(nèi)的內(nèi)容的。瀏覽器將jscss、image、font-family等存到內(nèi)存(存小文件)或者磁盤(存大文件)中,下次用戶再訪問的時(shí)候就從內(nèi)存中取,以便提升性能。
協(xié)商緩存需要往后臺(tái)發(fā)請(qǐng)求, 通過判斷來(lái)決定是使用協(xié)商緩存。如果請(qǐng)求內(nèi)容沒發(fā)生變化,則請(qǐng)求返回304(服務(wù)器收到請(qǐng)求,但內(nèi)容無(wú)變化),瀏覽器就用緩存內(nèi)的內(nèi)容。

2、強(qiáng)緩存如何觸發(fā)

http1.0 使用 Expires 響應(yīng)標(biāo)頭

如果服務(wù)器返回的響應(yīng)標(biāo)頭中包含Expires(時(shí)間戳),那么客戶端發(fā)起請(qǐng)求的時(shí)間在Expires之前的話,就觸發(fā)強(qiáng)緩存。

http1.1 使用 Cache-Control 響應(yīng)標(biāo)頭

同樣是服務(wù)器返回的一個(gè)響應(yīng)標(biāo)頭, 提供一些配置選項(xiàng),其優(yōu)先級(jí)比Expires高。(來(lái)源:百度百科)

cache-control.png

常用的配置就是 public、private、max-age。 下面這個(gè)例子是從某個(gè)網(wǎng)站的請(qǐng)求中copy來(lái)的,僅供參考。

  cache-control: 'private, must-revalidate, no-cache, no-store, max-age=0, post-check=0, pre-check=0'

3、協(xié)商緩存怎么觸發(fā)

http1.0 使用 請(qǐng)求頭:If-Modified-Since , 響應(yīng)頭:Last-Modified

服務(wù)器在上一次響應(yīng)請(qǐng)求時(shí),返回一個(gè)帶Last-Modified的響應(yīng)頭,值為一個(gè)時(shí)間戳,表示該資源最后一次在服務(wù)器修改的時(shí)間。當(dāng)客戶端再一次請(qǐng)求這個(gè)資源的時(shí)候, 請(qǐng)求頭就會(huì)帶上If-Modified-Since,值為上次服務(wù)器發(fā)來(lái)的Last-Modified, 服務(wù)器收到后,就和該資源最后修改時(shí)間比對(duì), 沒變化就返回304, 觸發(fā)協(xié)商緩存。
弊端: 時(shí)間間隔最小為1s,如果請(qǐng)求的資源在1s內(nèi)發(fā)生了改變,是可能會(huì)觸發(fā)協(xié)商緩存的, 導(dǎo)致無(wú)法獲取到最新的資源。

http1.1 使用 請(qǐng)求頭:If-None-Match , 響應(yīng)頭: Etag

為解決間隔最小1s的問題, If-None-MatchEtag就誕生了。 Etag是由服務(wù)器生成的, 是每個(gè)資源的唯一標(biāo)識(shí)字符串, 隨資源變化而改變。 判斷過程和http1.0的一致,請(qǐng)求的時(shí)候攜帶 If-None-Match,然后服務(wù)器比較這兩個(gè)值,沒變化就返回304, 觸發(fā)協(xié)商緩存。
弊端: 占用服務(wù)器資源較多, 雖然準(zhǔn)確度高,但是性能上不如Last-Modified & If-Modified-Since的方法。不過實(shí)際的影響不會(huì)很大, 基本上可以忽略不計(jì)。

補(bǔ)充

即便我們沒有配置緩存策略,瀏覽器也會(huì)采用自己的算法來(lái)緩存資源。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 今天看奇舞團(tuán)推了篇文章講緩存策略的,講的挺不錯(cuò),記錄一下。 原文地址就在下面。 總結(jié): 緩存分為強(qiáng)緩存和協(xié)商緩存...
    NowhereToRun閱讀 4,969評(píng)論 1 7
  • 關(guān)于緩存策略 自動(dòng)化的緩存機(jī)制(基于服務(wù)端和客戶端協(xié)商的) 分級(jí)緩存策略(3層):(1層)200狀態(tài) : 當(dāng)瀏覽器...
    達(dá)文西_Huong閱讀 310評(píng)論 0 0
  • 在前端開發(fā)中,性能一直是被大家所重視的一點(diǎn),然而判斷一個(gè)網(wǎng)站的性能最直觀的就是看網(wǎng)頁(yè)打開的速度。其中提高網(wǎng)頁(yè)反應(yīng)速...
    meow_possion閱讀 1,535評(píng)論 0 0
  • 最近在對(duì)項(xiàng)目做 IE 11 兼容,由 IE 的緩存問題,引發(fā)我對(duì)于瀏覽器緩存策略的思考。 緩存類型 web緩存主要...
    丶chlorine閱讀 927評(píng)論 0 1
  • 今天的主題讓我想起了過去的無(wú)知和愚蠢,不過誰(shuí)不是一點(diǎn)點(diǎn)進(jìn)步的了~ 有一次,向開發(fā)提了一個(gè)web端的bug,回歸后還...
    最愛西紅柿閱讀 446評(píng)論 0 0

友情鏈接更多精彩內(nèi)容