日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

前端升级客户端自动更新

發布時間:2023/11/21 HTML 38 coder
生活随笔 收集整理的這篇文章主要介紹了 前端升级客户端自动更新 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SPA類型應用,前端熱發布后,用戶端由于瀏覽器緩存不會重新獲取index.html 導致用戶沒有及時看到最新版本
所以寫了一個插件用戶協助客戶端實時更新

//思路:對比每一個script中的src的地址有無變化   因為打包后的js名稱一般為   test.dawe13s5.js  中間8位為哈希值 每次打包均不一樣·

//將此文件導入main.js 即可


let lastSrcs //上一次的所有script地址
const scriptReg = new RegExp('<script\\b[^<]*\\bsrc\\s*=\\s*["\']([^"\']*)["\'][^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>', 'gi');


async function extractNewScripts() {

  const html = await fetch('/?_timestamp='  +Date.now()).then(res => {
    res.text()
  })
  scriptReg.lastIndex = 0
  let result = []
  let match
  while ((match = scriptReg.exec(html))) {
    result.push(match.groups.src)
  }
  return result
}

async function needUpdate() {
  const newScripts = await extractNewScripts()
  if (!lastSrcs) {
    lastSrcs = newScripts
    return false

  }

  let result = false
  if (lastSrcs.length !== newScripts.length) {  //script個數不一樣 肯定有更新
    result = true
  }
  for (let i = 0; i < lastSrcs.length; i++) {  // 個數一樣就一個個對比名稱
    if (lastSrcs[i] !== newScripts[i]) {
      result = true
      break
    }

  }
  lastSrcs = newScripts
  return result
}


const DURATION = 2000
function autoRefresh() {
  setTimeout(async () => {
    const willUpdate = await needUpdate()
    if (willUpdate) {
      const result = confirm('頁面有更新,點擊確定更新頁面')

      if (result  ) {
       // location.reload()  // == F5
       location.href = location.href + '?timestamp=' + new Date().now();  //刪除緩存重新加載 == Ctrl + F5

      }
    }
    autoRefresh()
  },DURATION)
}


autoRefresh()

總結

以上是生活随笔為你收集整理的前端升级客户端自动更新的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。