Web前端中的靜態資源緩存筆記

根據webkit資源的分類

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

  • 主資源:好比HTML頁面,或者下載項,對應代碼中的類是MainResourceLoader
  • 派生資源:好比HTML頁面中內嵌的圖片或者腳本連接,對應代碼中的類是SubresourceLoader

根據http狀態碼分類

  1. 200 (from memory cache)
  2. 200 (from disk cache)
  3. 304 (Not Modified)

200 (from memory cache)

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

雖然Webkit支持 memoryCache,可是也只是針對 派生資源,它對應的類爲 CachedResource,用於保存原始數據(好比 CSSJS等),以及解碼過的圖片數據。

200 (from disk cache)

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

它的直接操做對象爲CurlCacheManager緩存

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

它的存儲形式爲一個index.dat文件,記錄存儲數據的url,而後再分別存儲該urlresponse信息content內容。Response信息最大做用就是用於判斷服務器上該url的content內容是否被修改。具體詳見:
Last-Modified服務器

304 (Not Modified)

訪問服務器,發現數據沒有網絡

更新,服務器返回此狀態碼。而後從緩存中讀取數據。學習

至於什麼時候使用本地緩存,什麼時候會訪問服務器304,這就和服務器在請求返回中的Header字段有關了。附上 個人HTTP學習筆記

http header

max-age

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

Expires

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

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

若是max-age和Expires同時存在,則被Cache-Control的max-age覆蓋3d

Last-modified

WEB 服務器認爲對象的最後修改時間,好比文件的最後修改時間,動態頁面的最後產生時間

ETag

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

Cache-Control

簡單理解,強緩存

三級緩存原理

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

結論

引用網上圖片
https://pic2.zhimg.com/80/v2-78461056b1ab65ea3ad247309d492d2b_hd.jpg

相關文章
相關標籤/搜索