瀏覽器緩存

強(qiáng)緩存

當(dāng)服務(wù)器返回 HTTP 響應(yīng)頭給瀏覽器時(shí),瀏覽器是通過(guò)響應(yīng)頭中的 Cache-Control 字段來(lái)設(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 頁(yè)面,內(nèi)存中的緩存也就被釋放了。

(2)硬盤緩存(from disk cache):硬盤緩存則是直接將緩存寫入硬盤文件中,讀取緩存需要對(duì)該緩存存放的硬盤文件進(jìn)行I/O操作,然后重新解析該緩存內(nèi)容,讀取復(fù)雜,速度比內(nèi)存緩存慢。

在瀏覽器中,瀏覽器會(huì)在js和圖片等文件解析執(zhí)行后直接存入內(nèi)存緩存中,那么當(dāng)刷新頁(yè)面時(shí)只需直接從內(nèi)存緩存中讀取(from memory cache);而css文件則會(huì)存入硬盤文件中,所以每次渲染頁(yè)面都需要從硬盤讀取緩存(from disk cache)。這段話存疑,具體問(wèn)題具體分析

協(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) 類型 說(shuō)明
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)資源沒(méi)有更新,使用本地資源

memory cache 是瀏覽器為了加快讀取緩存速度而進(jìn)行的自身的優(yōu)化行為,不受開(kāi)發(fā)者控制,也不受 HTTP 協(xié)議頭的約束,算是一個(gè)黑盒。Service Worker 是由開(kāi)發(fā)者編寫的額外的腳本,且緩存位置獨(dú)立,出現(xiàn)也較晚,使用還不算太廣泛。所以我們平時(shí)最為熟悉的其實(shí)是 disk cache,也叫 HTTP cache (因?yàn)椴幌?memory cache,它遵守 HTTP 協(xié)議頭中的字段)。平時(shí)所說(shuō)的強(qiáng)制緩存,對(duì)比緩存(也叫協(xié)商緩存),以及 Cache-Control 等,也都?xì)w于此類。

cache control 和etag的關(guān)系

緩存開(kāi)關(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

?著作權(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)容

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