博客 / 詳情

返回

前端緩存大全

前端緩存一直是前端一熱門話題,也是面試高頻考點。主要涉及前端性能優化相關知識點。先來看看大綱:
前端緩存大全

之前也有寫過一遍關於http緩存的文章一文讀懂http緩存(超詳細),裏面寫的比較詳細。有興趣可以去看看,今天呢,主要是對前端緩存做一個較為全面的總結,希望對大家有所幫助吧!

前端緩存大致分為兩類:

1、http緩存
2、本地緩存

一、http緩存

http緩存也稱為應用緩存,主要是緩存get請求時服務端返回的數據,緩存的前提是開啓了緩存,緩存開啓方式主要有兩種:一種是服務端配置開啓緩存,另一種是html通過meta標籤設置http-equiv

http緩存分為兩類:強緩存和協商緩存

強緩存是指無需向服務端發送請求即可從緩存中讀取緩存數據,性能是最優的一種方式。

協商緩存是指需要向服務端發送請求校驗該請求是否有過修改,如果服務端沒有修改過那麼就會返回304狀態碼,然後從前端緩存中讀數據。如果服務端有修改即返回服務端數據。

http緩存請求流程:

http緩存請求流程

強緩存相關請求響應頭:

1、Pragma(http1.0)優先級最高
Pragma:no-cache: 服務端進行校驗和Cache-Control:no-cache效果一致

2、Cache-Control(http1.1)優先級次高
請求頭:
image

響應頭:
image

no-store:不走緩存(優先級最高)
no-cache:走協商緩存
max-age=0:走協商緩存

3、Expires(http1.0)優先級最低
-1:表示立馬過期
GMT時間:表示緩存失效的時間

image

協商緩存相關請求響應頭:

1、ETag/If-None-Match(精度高、性能差,優先級高)
2、Last-Modified/If-Modified-Since(只能精確到秒)(只要打開了文件就默認做了修改,即使內容沒有做任何改變)

響應頭ETag和Last-Modified,其中ETag返回的是一個hash值,Last-Modified返回的是GMT格式的最後修改時間

請求頭中帶上與ETag對應的If-Not-Match,其值就是響應頭中返回的ETag的值,Last-Modified對應的If-Modified-Since
image

http緩存存儲方式:

1、from memory cache
從內存中獲取/一般緩存更新頻率較高的js、圖片、字體等資源

2、from disk cache
從磁盤中獲取/一般緩存更新頻率較低的js、css等資源

如何查看http緩存:

1、chrome://version
查看個人資料路徑:C:\Users{用户}\AppData\Local\Google\Chrome\User Data\Default

2、file:///C:/Users/{用户}/AppData/Local/Google/Chrome/User%20Data/Default/Cache/
查看到加密後的信息

3、下載工具:Chrome cache View
可查看到具體的緩存信息

二、本地緩存

本地緩存可分為:大容量緩存和小容量緩存

小容量存儲:

1、Cookies(4kb、會與後台交互)
2、LocalStorage(H5新增特性、5M、永久存儲)
3、SessionStorage(H5新增特性、5M、與瀏覽器標籤共存亡)
image

大容量緩存:

1、IndexedDB(非關係型數據庫、50M、正常使用)
2、WebSql(關係型數據庫、50M左右、W3C標準廢棄)

PWA(Progressive web apps,漸進式 Web 應用):

1、可將應用添加至主屏幕
2、通過service worker實現離線緩存功能
3、可實現消息推送

service worker工作流程:
image

特點:
1、運行於瀏覽器後台,不受頁面刷新的影響,可以監聽和截攔作用域範圍內所有頁面的HTTP請求
2、網站必須使用HTTPS。除了使用本地開發環境調試

如何查看緩存:

F12 + Application選項卡

默認緩存

默認緩存也稱瀏覽器前進/後退緩存(Backward/Forward Cache, BF Cache)(瀏覽器默認開啓的本地緩存)也有人叫disk Cache

BF Cache是一種瀏覽器優化,HTML標準並未指定其如何進行緩存,因此緩存行為是各瀏覽器各自實現,所以不盡相同。由於不是HTTP緩存,所以通過頭文件緩存設置 no-cache 是無效的

BF Cache的邏輯是:用户點擊前進/後退按鈕的時候,就是期待回到“之前看到過的那個頁面”,所以瀏覽器不需要從服務器獲取一份新的代碼並重新加載頁面

如果需要禁用BF Cache可通過監聽瀏覽器history事件,對頁面進行reload可實現頁面刷新

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.