強(qiáng)緩存
當(dāng)服務(wù)器返回 HTTP 響應(yīng)頭給瀏覽器時(shí),瀏覽器是通過響應(yīng)頭中的 Cache-Control 字段來設(shè)置是否緩存該資源义辕。
內(nèi)存緩存(from memory cache)和硬盤緩存(from disk cache)历谍,如下:
(1)內(nèi)存緩存(from memory cache):內(nèi)存緩存具有兩個(gè)特點(diǎn)现拒,分別是快速讀取和時(shí)效性:
1、快速讀韧蕖:內(nèi)存緩存會(huì)將編譯解析后的文件印蔬,直接存入該進(jìn)程的內(nèi)存中,占據(jù)該進(jìn)程一定的內(nèi)存資源脱衙,以方便下次運(yùn)行使用時(shí)的快速讀取扛点。
2、時(shí)效性:一旦該進(jìn)程關(guān)閉岂丘,則該進(jìn)程的內(nèi)存則會(huì)清空陵究。例如我們關(guān)閉 Tab 頁面,內(nèi)存中的緩存也就被釋放了奥帘。
(2)硬盤緩存(from disk cache):硬盤緩存則是直接將緩存寫入硬盤文件中铜邮,讀取緩存需要對(duì)該緩存存放的硬盤文件進(jìn)行I/O操作,然后重新解析該緩存內(nèi)容寨蹋,讀取復(fù)雜松蒜,速度比內(nèi)存緩存慢。
在瀏覽器中已旧,瀏覽器會(huì)在js和圖片等文件解析執(zhí)行后直接存入內(nèi)存緩存中秸苗,那么當(dāng)刷新頁面時(shí)只需直接從內(nèi)存緩存中讀取(from memory cache);而css文件則會(huì)存入硬盤文件中运褪,所以每次渲染頁面都需要從硬盤讀取緩存(from disk cache)惊楼。
這段話存疑玖瘸,具體問題具體分析
協(xié)商緩存
強(qiáng)緩存失效會(huì)帶著緩存標(biāo)志給服務(wù)器發(fā)請(qǐng)求,如果緩存還能用就是304
Etag / If-None-Match
Chrome瀏覽器策略:什么時(shí)候是from memory cache 什么時(shí)候是from disk cache 呢
即哪些資源會(huì)放在內(nèi)存當(dāng)中檀咙,哪些資源瀏覽器會(huì)放在磁盤上呢雅倒,結(jié)果如下下表所示
統(tǒng)計(jì)表
狀態(tài) 類型 說明
200 form memory cache 不請(qǐng)求網(wǎng)絡(luò)資源,資源在內(nèi)存當(dāng)中
200 form disk ceche 不請(qǐng)求網(wǎng)絡(luò)資源弧可,在磁盤當(dāng)中
200 資源大小數(shù)值 從服務(wù)器下載最新資源
304 報(bào)文大小 請(qǐng)求服務(wù)端發(fā)現(xiàn)資源沒有更新蔑匣,使用本地資源
memory cache 是瀏覽器為了加快讀取緩存速度而進(jìn)行的自身的優(yōu)化行為,不受開發(fā)者控制棕诵,也不受 HTTP 協(xié)議頭的約束裁良,算是一個(gè)黑盒。Service Worker 是由開發(fā)者編寫的額外的腳本校套,且緩存位置獨(dú)立价脾,出現(xiàn)也較晚,使用還不算太廣泛搔确。所以我們平時(shí)最為熟悉的其實(shí)是 disk cache彼棍,也叫 HTTP cache (因?yàn)椴幌?memory cache灭忠,它遵守 HTTP 協(xié)議頭中的字段)膳算。平時(shí)所說的強(qiáng)制緩存,對(duì)比緩存(也叫協(xié)商緩存)弛作,以及 Cache-Control 等涕蜂,也都?xì)w于此類。
cache control 和etag的關(guān)系
緩存開關(guān)是: pragma映琳, cache-control机隙。
緩存校驗(yàn)有:Expires,Last-Modified萨西,etag有鹿。
注意到一些http response不包含cache control只包含etag,對(duì)于此現(xiàn)象的回答是:
Caching is usually enabled by default in browers, so cache-control
can be used to either customise this behaviour or disable it.
https://stackoverflow.com/questions/14496694/whats-default-value-of-cache-control
參考資料
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Caching
https://segmentfault.com/a/1190000039820397
https://www.cnblogs.com/chengxs/p/10396066.html