VUE自动检测版本更新

简介: 本文简单介绍了实现线上更新的一种思路,相比在生产环境下实现热更新,或者是使用websocket相对来说都是比较麻烦的,而且还需要改动服务器,这种做法只需要一小段js函数即可解决,并且效率也是非常高的,对整个系统的运行,基本上是没有任何负面影响,因为单页面模式下,每次请求的页面实际上传输的数据非常少,所以两秒一次,完全不会给站点增加负荷。

前言

    当用户在当前站点停留时间比较长,中途站点进行升级更新之后,用户如果不刷新页面就任然停留在旧的页面里,如何让用户收到一个提示,引导用户进行更新操作呢?下面给大家介绍如何站点更新如何在生产环境提示用户更新,进行页面刷新操作,核心原理其实很简单。

一、思路

1,每隔一小段时间fetch请求一次服务器首页数据,解析为纯文本。
2,识别纯文本里对应script标签路径文件指纹是否发生变动
3,有变动则弹框提示引导用户进行刷新操作

二、实现步骤

1.调用fetch拿到首页的html并且转为纯文本格式

核心代码:

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

返回结果

由于vue是单页面,所以返回数据一般都不多,一目了然如下:

<!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>

    仔细观察返回数据不难发现script标签里的 \ 所对应的文件路径是./assets/index.b3865953.js 这是由于前端工程化会自动给文件带上文件指纹,只要这些文件有变动,那么这些文件指纹也就是hash值也会跟着变化,每隔一小段时间去分析页面中script元素的js,只要发现js路径有变化,说明这个系统是有所改动。

具体代码如下:

//请求首页,timestep是为了避免缓存数据

    //请求首页
    async function newScripts(){
    
      const html = await fetch('/?timestep='+ Date.now()).then((res)=>res.text());
      scriptReg.lastIndex = 0;//正则分析页面所有url地址
      let result = [];//保存分析数据到一个数组里
      let match;
      while((match=scriptReg.exec(html))){
    
        result.push(match.groups.src)
      }
      return result;//返回数组
    }

//数组里就记录了这一次请求首页在首页当中所有的js的获取地址

2.检查是否需要更新

首先调用newScripts拿到当前页所有js路径

代码如下:

  async function needUpdate(){
   
      const newScripts = await newScripts();//调用newScripts
      if(!lastSrcs){
   //如果之前没有保存页面js地址的话,进行一次保存,初始化并存下当前数据
          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.有则弹出

每隔两秒调用 needUpdate检查更新函数,判断是否有变化,有更新则提示用户刷新页面,然后在调用自身,不断的进行检查,从而达到提示更新的目的。

代码如下:

const timeData=2000;//检查间隔时间
function autRef(){
   
  setTimeout(async()=>{
   
    const willUp = await needUpdate();//调用检查更新函数
    if(willUp){
   
      const  result = confirm('数据更新点击确认刷新当前页')
    };
    if(result){
   
      location.reload();//刷新当前页
    }
    autRef();
  },timeData)
}

这里只做了个简单的弹窗,当然大家可以继续优化,可以写成任意自己想要的样子。


总结

    以上就是今天要讲的内容,本文仅仅简单介绍了实现线上更新的一种思路,相比在生产环境下实现热更新,或者是使用websocket相对来说都是比较麻烦的,而且还需要改动服务器,这种做法只需要一小段js函数即可解决,并且效率也是非常高的,对整个系统的运行,基本上是没有任何负面影响,因为单页面模式下,每次请求的页面实际上传输的数据非常少,所以两秒一次,完全不会给站点增加负荷。

目录
相关文章
|
3月前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
162 1
|
21天前
|
移动开发 JavaScript API
Vue Router 核心原理
Vue Router 是 Vue.js 的官方路由管理器,用于实现单页面应用(SPA)的路由功能。其核心原理包括路由配置、监听浏览器事件和组件渲染等。通过定义路径与组件的映射关系,Vue Router 将用户访问的路径与对应的组件关联,支持哈希和历史模式监听 URL 变化,确保页面导航时正确渲染组件。
|
25天前
|
监控 JavaScript 前端开发
ry-vue-flowable-xg:震撼来袭!这款基于 Vue 和 Flowable 的企业级工程项目管理项目,你绝不能错过
基于 Vue 和 Flowable 的企业级工程项目管理平台,免费开源且高度定制化。它覆盖投标管理、进度控制、财务核算等全流程需求,提供流程设计、部署、监控和任务管理等功能,适用于企业办公、生产制造、金融服务等多个场景,助力企业提升效率与竞争力。
83 12
|
21天前
|
JavaScript 前端开发 开发者
Vue中的class和style绑定
在 Vue 中,class 和 style 绑定是基于数据驱动视图的强大功能。通过 class 绑定,可以动态更新元素的 class 属性,支持对象和数组语法,适用于普通元素和组件。style 绑定则允许以对象或数组形式动态设置内联样式,Vue 会根据数据变化自动更新 DOM。
|
21天前
|
JavaScript 前端开发 数据安全/隐私保护
Vue Router 简介
Vue Router 是 Vue.js 官方的路由管理库,用于构建单页面应用(SPA)。它将不同页面映射到对应组件,支持嵌套路由、路由参数和导航守卫等功能,简化复杂前端应用的开发。主要特性包括路由映射、嵌套路由、路由参数、导航守卫和路由懒加载,提升性能和开发效率。安装命令:`npm install vue-router`。
|
2月前
|
JavaScript 安全 API
iframe嵌入页面实现免登录思路(以vue为例)
通过上述步骤,可以在Vue.js项目中通过 `iframe`实现不同应用间的免登录功能。利用Token传递和消息传递机制,可以确保安全、高效地在主应用和子应用间共享登录状态。这种方法在实际项目中具有广泛的应用前景,能够显著提升用户体验。
129 8
|
2月前
|
存储 设计模式 JavaScript
Vue 组件化开发:构建高质量应用的核心
本文深入探讨了 Vue.js 组件化开发的核心概念与最佳实践。
86 1
|
3月前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
4月前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
4月前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的

热门文章

最新文章