最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue實(shí)現(xiàn)自動(dòng)檢測(cè)以及版本的更新

 更新時(shí)間:2023年03月31日 11:01:20   作者:迪迦  
當(dāng)用戶在當(dāng)前站點(diǎn)停留時(shí)間比較長,中途站點(diǎn)進(jìn)行升級(jí)更新之后,用戶如果不刷新頁面就任然停留在舊的頁面里,如何讓用戶收到一個(gè)提示,引導(dǎo)用戶進(jìn)行更新操作呢?下面給大家介紹如何站點(diǎn)更新如何在生產(chǎn)環(huán)境提示用戶更新,進(jìn)行頁面刷新操作,核心原理其實(shí)很簡單

一、思路

1,每隔一小段時(shí)間fetch請(qǐng)求一次服務(wù)器首頁數(shù)據(jù),解析為純文本。

2,識(shí)別純文本里對(duì)應(yīng)script標(biāo)簽路徑文件指紋是否發(fā)生變動(dòng)

3,有變動(dòng)則彈框提示引導(dǎo)用戶進(jìn)行刷新操作

二、實(shí)現(xiàn)步驟

1.調(diào)用fetch拿到首頁的html并且轉(zhuǎn)為純文本格式

核心代碼:

fetch('/').then(res=>res.text()).then(res=>console.log(res))

返回結(jié)果

由于vue是單頁面,所以返回?cái)?shù)據(jù)一般都不多,一目了然如下:

<!DOCTYPE html>
<html lang=en>
<head>
  <meta charset=UTF-8>
  <link rel=icon href=./favicon.ico> <meta name=viewport content="width=device-width,initial-scale=1">
  <script type=module crossorigin src=./assets/index.b3865953.js> </script> 
  <body>
    <div id=app></div><script src=./js/WsUtil.js type=text/javascript charset=utf-8></script>
  </body>
</html>

仔細(xì)觀察返回?cái)?shù)據(jù)不難發(fā)現(xiàn)script標(biāo)簽里的 <script type=module crossorigin src=./assets/index.b3865953.js> </script> 所對(duì)應(yīng)的文件路徑是./assets/index.b3865953.js 這是由于前端工程化會(huì)自動(dòng)給文件帶上文件指紋,只要這些文件有變動(dòng),那么這些文件指紋也就是hash值也會(huì)跟著變化,每隔一小段時(shí)間去分析頁面中script元素的js,只要發(fā)現(xiàn)js路徑有變化,說明這個(gè)系統(tǒng)是有所改動(dòng)。

具體代碼如下:

//請(qǐng)求首頁,timestep是為了避免緩存數(shù)據(jù)

    //請(qǐng)求首頁
    async function newScripts(){
      const html = await fetch('/?timestep='+ Date.now()).then((res)=>res.text());
      scriptReg.lastIndex = 0;//正則分析頁面所有url地址
      let result = [];//保存分析數(shù)據(jù)到一個(gè)數(shù)組里
      let match;
      while((match=scriptReg.exec(html))){
        result.push(match.groups.src)
      }
      return result;//返回?cái)?shù)組
    }

//數(shù)組里就記錄了這一次請(qǐng)求首頁在首頁當(dāng)中所有的js的獲取地址

2.檢查是否需要更新

首先調(diào)用newScripts拿到當(dāng)前頁所有js路徑

代碼如下:

  async function needUpdate(){
      const newScripts = await newScripts();//調(diào)用newScripts
      if(!lastSrcs){//如果之前沒有保存頁面js地址的話,進(jìn)行一次保存,初始化并存下當(dāng)前數(shù)據(jù)
          lastSrcs = newScripts;
          return false;
        }
        let result = false ;
        if(lastSrcs.length !== newScripts.length){
          result = true;
        }
        for(let i = 0;i<lastSrcs.length;i++){
          if(lastSrcs[i] !== newScripts[i]){
            result = true;
            break ;
          }
        }
      }
      lastSrcs = newScripts;
      return result;
    }

3.有則彈出

每隔兩秒調(diào)用 needUpdate檢查更新函數(shù),判斷是否有變化,有更新則提示用戶刷新頁面,然后在調(diào)用自身,不斷的進(jìn)行檢查,從而達(dá)到提示更新的目的。

代碼如下:

const timeData=2000;//檢查間隔時(shí)間
function autRef(){
  setTimeout(async()=>{
    const willUp = await needUpdate();//調(diào)用檢查更新函數(shù)
    if(willUp){
      const  result = confirm('數(shù)據(jù)更新點(diǎn)擊確認(rèn)刷新當(dāng)前頁')
    };
    if(result){
      location.reload();//刷新當(dāng)前頁
    }
    autRef();
  },timeData)
}

這里只做了個(gè)簡單的彈窗,當(dāng)然大家可以繼續(xù)優(yōu)化,可以寫成任意自己想要的樣子。

總結(jié)

以上就是今天要講的內(nèi)容,本文僅僅簡單介紹了實(shí)現(xiàn)線上更新的一種思路,相比在生產(chǎn)環(huán)境下實(shí)現(xiàn)熱更新,或者是使用websocket相對(duì)來說都是比較麻煩的,而且還需要改動(dòng)服務(wù)器,這種做法只需要一小段js函數(shù)即可解決,并且效率也是非常高的,對(duì)整個(gè)系統(tǒng)的運(yùn)行,基本上是沒有任何負(fù)面影響,因?yàn)閱雾撁婺J较拢看握?qǐng)求的頁面實(shí)際上傳輸?shù)臄?shù)據(jù)非常少,所以兩秒一次,完全不會(huì)給站點(diǎn)增加負(fù)荷。

到此這篇關(guān)于Vue實(shí)現(xiàn)自動(dòng)檢測(cè)以及版本的更新的文章就介紹到這了,更多相關(guān)Vue檢測(cè)版本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue 動(dòng)態(tài)表單開發(fā)方法案例詳解

    vue 動(dòng)態(tài)表單開發(fā)方法案例詳解

    這篇文章主要介紹了vue 動(dòng)態(tài)表單開發(fā)方法,結(jié)合具體案例形式詳細(xì)分析了vue.js動(dòng)態(tài)表單相關(guān)原理、開發(fā)步驟與實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-12-12
  • Vue過渡效果之CSS過渡詳解(結(jié)合transition,animation,animate.css)

    Vue過渡效果之CSS過渡詳解(結(jié)合transition,animation,animate.css)

    Vue 在插入、更新或者移除 DOM 時(shí),提供多種不同方式的應(yīng)用過渡效果。本文將從CSS過渡transition、CSS動(dòng)畫animation及配合使用第三方CSS動(dòng)畫庫(如animate.css)這三方面來詳細(xì)介紹Vue過渡效果之CSS過渡
    2020-02-02
  • 前端請(qǐng)求超時(shí)截?cái)郺xios?timeout設(shè)置未生效情況解決記錄

    前端請(qǐng)求超時(shí)截?cái)郺xios?timeout設(shè)置未生效情況解決記錄

    在項(xiàng)目中遇到了后臺(tái)接口返回?cái)?shù)據(jù)慢的時(shí)候往往需要設(shè)置請(qǐng)求失效時(shí)間,在項(xiàng)目中遇到設(shè)置timeout失效問題由此記錄下來,這篇文章主要給大家介紹了前端請(qǐng)求超時(shí)截?cái)郺xios?timeout設(shè)置未生效情況解決的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • vue中防抖和節(jié)流的使用方法

    vue中防抖和節(jié)流的使用方法

    防抖和節(jié)流是我們?cè)陂_發(fā)過程中常用優(yōu)化性能的方式,可以減少不必要的計(jì)算,不浪費(fèi)資源,只在適合的時(shí)候再進(jìn)行觸發(fā)計(jì)算,這篇文章主要給大家介紹了關(guān)于vue中防抖和節(jié)流使用的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • vue+intro.js插件實(shí)現(xiàn)引導(dǎo)功能

    vue+intro.js插件實(shí)現(xiàn)引導(dǎo)功能

    使用 intro.js這個(gè)插件,來實(shí)現(xiàn)一個(gè)引導(dǎo)性的效果,經(jīng)常在一些新手引導(dǎo)頁遇到這樣的需求,下面通過本文給大家分享vue+intro.js插件實(shí)現(xiàn)引導(dǎo)功能,感興趣的朋友一起看看吧
    2024-06-06
  • Vue項(xiàng)目使用localStorage+Vuex保存用戶登錄信息

    Vue項(xiàng)目使用localStorage+Vuex保存用戶登錄信息

    這篇文章主要為大家詳細(xì)介紹了Vue項(xiàng)目使用localStorage+Vuex保存用戶登錄信息,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Vue插槽的作用

    Vue插槽的作用

    插槽(slot)是 vue 為組件的封裝者提供的能力。允許開發(fā)者在封裝組件時(shí),把不確定的、希望由用戶指定的部分定義為插槽??梢园巡宀壅J(rèn)為是組件封裝期間,為用戶預(yù)留的內(nèi)容的占位符
    2022-09-09
  • vue實(shí)現(xiàn)一個(gè)獲取按鍵展示快捷鍵效果的Input組件

    vue實(shí)現(xiàn)一個(gè)獲取按鍵展示快捷鍵效果的Input組件

    這篇文章主要介紹了vue如何實(shí)現(xiàn)一個(gè)獲取按鍵展示快捷鍵效果的Input組件,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2021-01-01
  • vue3?中使用?jsx?開發(fā)的詳細(xì)過程

    vue3?中使用?jsx?開發(fā)的詳細(xì)過程

    這篇文章主要介紹了vue3?中使用?jsx?開發(fā),本文著重說一下在使用 .vue 文件和 .jsx 文件在使用語法上的差異,需要的朋友可以參考下
    2022-09-09
  • VUE3中h()函數(shù)和createVNode()函數(shù)的使用解讀

    VUE3中h()函數(shù)和createVNode()函數(shù)的使用解讀

    這篇文章主要介紹了VUE3中h()函數(shù)和createVNode()函數(shù)的使用解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評(píng)論

时尚| 白山市| 白城市| 宝鸡市| 门源| 马鞍山市| 常熟市| 栾川县| 竹溪县| 九江县| 綦江县| 黄石市| 天镇县| 商南县| 平南县| 克山县| 札达县| 赣榆县| 个旧市| 齐河县| 丰台区| 安龙县| 兴宁市| 松桃| 青州市| 永靖县| 古丈县| 外汇| 蒙阴县| 英德市| 安塞县| 阿拉尔市| 简阳市| 峨山| 乌拉特后旗| 八宿县| 玉门市| 安泽县| 东丽区| 晋中市| 鄂托克前旗|