1. 程式人生 > >from memory cache和from disk cache一些問題

from memory cache和from disk cache一些問題

這個問題源於今天無意中開啟開發者工具的network發現瀏覽器在讀取快取時還有這兩種不同的方法,所以看了一些資料,自己寫一一篇總結一下。

發現雖然都是快取中去檔案但還是有一些區別的。

webkit資源的分類:

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

http狀態碼:

200 from memory cache

不訪問伺服器,直接讀快取,從記憶體中讀取快取。此時的資料時快取到記憶體中的,當kill程序後,也就是瀏覽器關閉以後,資料將不存在。

但是這種方式只能快取派生資源。

200 from disk cache

不訪問伺服器,直接讀快取,從磁碟中讀取快取,當kill程序時,資料還是存在。

這種方式也只能快取派生資源

304 Not Modified

訪問伺服器,發現數據沒有更新,伺服器返回此狀態碼(不返回資源)。然後從快取中讀取資料。

三級快取原理:

  1. 先去記憶體看,如果有,直接載入
  2. 如果記憶體沒有,擇取硬盤獲取,如果有直接載入
  3. 如果硬碟也沒有,那麼就進行網路請求
  4. 載入到的資源快取到硬碟和記憶體

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

圖片為例:

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

http header:(與快取有關的請求頭部)

max-age

web中的檔案被使用者訪問(請求)後的存活時間,是個相對的值,相對Request_time(請求時間)

Expires

Expires指定的時間根據伺服器配置可能有兩種:(GMT時間)

  1. 檔案最後訪問時間
  2. 檔案絕對修改時間

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

last-modified

WEB 伺服器認為物件的最後修改時間,比如檔案的最後修改時間,動態頁面的最後產生時間

ETag

物件(比如URL)的標誌值,就一個物件而言,檔案被修改,Etag也會修改

Cache-Control

簡單理解,強快取

前兩者來驗證資源新鮮度,後兩者來驗證資源的有效值。

最後結論:

見圖片,來自於網路