from memory cache和from disk cache一些問題
阿新 • • 發佈:2018-12-16
這個問題源於今天無意中開啟開發者工具的network發現瀏覽器在讀取快取時還有這兩種不同的方法,所以看了一些資料,自己寫一一篇總結一下。
發現雖然都是快取中去檔案但還是有一些區別的。
webkit資源的分類:
webkit的資源分類主要分為兩大類:主資源和派生資源。
http狀態碼:
200 from memory cache
不訪問伺服器,直接讀快取,從記憶體中讀取快取。此時的資料時快取到記憶體中的,當kill程序後,也就是瀏覽器關閉以後,資料將不存在。
但是這種方式只能快取派生資源。
200 from disk cache
不訪問伺服器,直接讀快取,從磁碟中讀取快取,當kill程序時,資料還是存在。
這種方式也只能快取派生資源
304 Not Modified
訪問伺服器,發現數據沒有更新,伺服器返回此狀態碼(不返回資源)。然後從快取中讀取資料。
三級快取原理:
- 先去記憶體看,如果有,直接載入
- 如果記憶體沒有,擇取硬盤獲取,如果有直接載入
- 如果硬碟也沒有,那麼就進行網路請求
- 載入到的資源快取到硬碟和記憶體
所以我們可以來解釋這個現象
圖片為例:
訪問-> 200 -> 退出瀏覽器 再進來-> 200(from disk cache) -> 重新整理 -> 200(from memory cache)
http header:(與快取有關的請求頭部)
max-age
web中的檔案被使用者訪問(請求)後的存活時間,是個相對的值,相對Request_time(請求時間)
Expires
Expires指定的時間根據伺服器配置可能有兩種:(GMT時間)
- 檔案最後訪問時間
- 檔案絕對修改時間
如果max-age和Expires同時存在,則被Cache-Control的max-age覆蓋
last-modified
WEB 伺服器認為物件的最後修改時間,比如檔案的最後修改時間,動態頁面的最後產生時間
ETag
物件(比如URL)的標誌值,就一個物件而言,檔案被修改,Etag也會修改
Cache-Control
簡單理解,強快取
前兩者來驗證資源新鮮度,後兩者來驗證資源的有效值。
最後結論:
見圖片,來自於網路