瀏覽器快取 from memory cache與from disk cache詳解
在chrome瀏覽器中的控制檯Network中size欄通常會有三種狀態
1.from memory cache
2.from disk cache
3.資源本身的大小(如:1.5k)
那麼問題來了
1.三種區別在哪裡;2.瀏覽器採取不同措施的原則是什麼;3.其他瀏覽器的策略
下面分別講述以上三個問題
1.三種區別在哪
from memory cache:字面理解是從記憶體中,其實也是字面的含義,這個資源是直接從記憶體中拿到的,不會請求伺服器一般已經載入過該資源且快取在了記憶體當中,當關閉該頁面時,此資源就被記憶體釋放掉了,再次重新開啟相同頁面時不會出現from memory cache的情況
from disk cache:同上類似,此資源是從磁碟當中取出的,也是在已經在之前的某個時間載入過該資源,不會請求伺服器但是此資源不會隨著該頁面的關閉而釋放掉,因為是存在硬碟當中的,下次開啟仍會from disk cache
資源本身大小數值:當http狀態為200是實實在在從瀏覽器獲取的資源,當http狀態為304時該數字是與服務端通訊報文的大小,並不是該資源本身的大小,該資源是從本地獲取的
2.chrome採取措施的準則
什麼時候是from memory cache 什麼時候是from disk cache 呢?
即哪些資源會放在記憶體當中,哪些資源瀏覽器會放在磁碟上呢,結果如下下表所示
狀態 | 型別 | 說明 |
200 | form memory cache | 不請求網路資源,資源在記憶體當中 |
200 | form disk ceche | 不請求網路資源,在磁碟當中 |
200 | 資源大小數值 | 從伺服器下載最新資源 |
304 | 報文大小 | 請求服務端發現資源沒有更新,使用本地資源 |
以上是chrome在請求資源是最常見的兩種http狀態碼
由此可見樣式表一般在磁碟中,不會快取到記憶體中去,因為css樣式載入一次即可渲染出網頁
但是指令碼卻可能隨時會執行,如果指令碼在磁碟當中,在執行該指令碼需要從磁碟中取到記憶體當中來
這樣的IO開銷是比較大的,有可能會導致瀏覽器失去響應
3.不同瀏覽器策略是否一致
以上的資料及統計都是在chrome瀏覽器下進行的
在Firefox下並沒有from memory cache以及from disk cache的狀態展現
相同的資源在chrome下是from disk/memory cache,但是Firefox統統是304狀態碼
即Firefox下會快取資源,但是每次都會請求伺服器對比當前快取是否更改,chrome不請求伺服器,直接拿過來用
這也是為啥chrome比較快的原因之一吧,
當然以上是粗略的研究chrome資源的獲取策略,至於chrome如何保證資源的更新,
即什麼時候200,什麼時候304還需要更深入的研究
參考:https://blog.csdn.net/garrettzxd/article/details/80684880