覆蓋更新與增量更新

覆蓋更新與增量更新都是建立在強制緩存的基礎上,即cache-control不設置爲no-cache或者no-store。

覆蓋更新和增量更新目的
爲了提高頁面的加載性能,啓用強制緩存策略,把文件緩存到本地並且設置cache-control的max-age爲30天,如果再過期時間內,項目需要迭代更新,必須讓瀏覽器放棄緩存文件,發送請求獲取最新資源。

覆蓋更新
爲了在過期時間內獲取到最新資源,覆蓋更新的策略是在引用資源URL後面加上參數,類似時間戳,原理是瀏覽器會把參數不同的url當作新的url

<script src = "main.home.js?v=1.0.1"></script>

人工添加參數比較繁瑣,也可能產生失誤,於是採用hash指紋(根據整個文件計算出的hash值)

<script src = "main.home.js?v=43f54j5st54"></script>

覆蓋更新存在以下問題:

  • 靜態文件必須與引用它的html文件同步更新,不然會出現資源不同步
    針對html文件與靜態資源分開部署的情況下,兩種資源部署存在時間差,影響用戶體驗,因此很多團隊先擇在半夜更新
  • 不利於版本回退

增量更新
增量更新完美解決了覆蓋更新的缺陷,方法是把hash指紋作爲文件名的一部分

<script src = "main.home43f54j5st54.js"></script>

先將靜態文件更新上去,舊的靜態文件並沒有刪除,此時html引用的還是舊文件,當把動態html更新上去,用戶便能在第一時間看到更新

多模塊下的增量更新
假如主模塊加載了兩個模塊,一個同步加載,一個異步加載
三種情況:

  1. 修改主模塊代碼,只有主模塊的hash指紋改變
  2. 修改同步模塊代碼,同步模塊和主模塊的hash指紋改變,異步模塊hash指紋不改變
  3. 修改異步模塊代碼,異步模塊和主模塊hash指紋都改變,同步模塊hash指紋不改變
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章