1. 程式人生 > 其它 >瀏覽器快取的一些知識

瀏覽器快取的一些知識

1,快取的作用

  快取可以優化效能,應該是最簡單的一種方式了,可以減少一些不必要的請求,或者在資料一致的情況下,不再將資料回傳回來。

2,快取位置

  快取位置有四種,各自有優先順序,當四種都沒有命中時,才會去請求網路

  • service worke : 我們可以來手動控制快取哪些檔案,如何匹配和讀取快取。不管service worker命中快取與否。該請求瀏覽器上都顯示的from service worker。
  • memory cache: 記憶體中的快取,讀取速度比磁碟中的快取快很多,但是持續時間短,會隨著程序的釋放而釋放。
  • disk cache: 硬碟中的快取,讀取速度慢,但容量大,儲存時間很長。會根據header中的欄位判斷哪些需要快取,哪些資源過期了需要請求,哪些資源可以不請求直接使用。
  • push cache:http2中的內容。當以上三種都沒有命中時才使用。快取時間短,會話結束就被釋放。

3,快取策略

  一:強快取:強快取可以通過設定header的Expires和Cache-Control,表示在快取期間不用請求,status為200

    1,Expires

      Expires: Fri, 17 Dec 2021 11:11:00 GMT
      
      表示在2021年12月17 11:11:00後會過期,需要再次請求。判斷是基於本地時間處理的,修改本地時間會造成快取過期

    2,Cache-Control

      Cache-control: max-age=60

      優先順序高於Expires,表示在60秒後過期,需要再次請求。

  

  二:協商快取:快取過期,就需要發起請求驗證資源是不是更新了。可以通過設定header的Last-Modified和ETag

    1,Last-Modified和If-Modified-Since

      Last-Modified為本地檔案最後修改日期,If-Modified-Since會發送該值查詢是否有更新,如果有更新則返回更新的資源,否則返回304狀態碼

      本地開啟快取檔案,即使沒修改也會造成Last-Modified被更改,浪費請求

      Last-Modified只能以秒計時,如果在1秒之內的改變檔案,服務端還是會以為檔案沒有改變,不能獲取最新資源

    2,ETag和If-None-Match

      優先順序比Last-Modified高,ETag類似檔案指紋,If-None-Match會將ETag傳送到服務端,如果指紋有改變,則返回新的資源。

4,實際使用

  對頻繁變動的資源,Cache-Control設定為no-cache使每次都發送請求,再配合ETag和Last-Modified來驗證資源是否過期。

  程式碼檔案: 檔名進行hash處理,Cache-Control設定時間為一個長時間,這樣的話只有當hash變化的時候才去請求新資源,否則就一直使用快取資源