瀏覽器緩存的一些知識


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變化的時候才去請求新資源,否則就一直使用緩存資源      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM