由memoryCache和diskCache產生的瀏覽器緩存機制的思考


今天在做項目的優化的時候,使用chrome開發者工具的network發現了細節:

image

雖然這兩個看起來都是從緩存中讀取,但還是有一些不一樣的!

webkit資源的分類

webkit的資源分類主要分為兩大類:主資源和派生資源

http狀態碼

200 from memory cache

不訪問服務器,直接讀緩存,從內存中讀取緩存。此時的數據時緩存到內存中的,當kill進程后,也就是瀏覽器關閉以后,數據將不存在。

但是這種方式只能緩存派生資源。

200 from disk cache

不訪問服務器,直接讀緩存,從磁盤中讀取緩存,當kill進程時,數據還是存在。

這種方式也只能緩存派生資源

304 Not Modified

訪問服務器,發現數據沒有
更新,服務器返回此狀態碼。然后從緩存中讀取數據。

但是這里有困惑,怎么判斷from memory cache還是304

三級緩存原理

  1. 先去內存看,如果有,直接加載
  2. 如果內存沒有,擇取硬盤獲取,如果有直接加載
  3. 如果硬盤也沒有,那么就進行網絡請求
  4. 加載到的資源緩存到硬盤和內存

所以我們可以來解釋這個現象

圖片為例:

訪問-> 200 -> 退出瀏覽器
再進來-> 200(from disk cache) -> 刷新 -> 200(from memory cache)

http header

max-age

web中的文件被用戶訪問(請求)后的存活時間,是個相對的值,相對Request_time(請求時間)

Expires

Expires指定的時間根據服務器配置可能有兩種:

  1. 文件最后訪問時間
  2. 文件絕對修改時間

如果max-age和Expires同時存在,則被Cache-Control的max-age覆蓋

last-modified

WEB 服務器認為對象的最后修改時間,比如文件的最后修改時間,動態頁面的最后產生時間

ETag

對象(比如URL)的標志值,就一個對象而言,文件被修改,Etag也會修改

Cache-Control

簡單理解,強緩存

最后結論

見圖片(來源自網絡)
image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM