首页 > 其他分享 >前端升级客户端自动更新

前端升级客户端自动更新

时间:2023-11-20 17:15:16浏览次数:24  
标签:const 前端 return let result 自动更新 newScripts lastSrcs 客户端

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()

标签:const,前端,return,let,result,自动更新,newScripts,lastSrcs,客户端
From: https://www.cnblogs.com/bbigger004/p/17844356.html

相关文章

  • oracle 轻量化包安装,使用第三方客户端
    轻量版客户端工具包:此方式适用于NavicatPremium、PLSQL、DBeaver等客户端工具的,如果其他程序(自己开发的程序,中间件等)要使用的话,还是要安装完整版得客户端。下载地址;64位客户端工具:https://download.oracle.com/otn_software/nt/instantclient/1912000/instantclient-basic-wind......
  • 将 OpenVP 客户端作为 Systemd 服务运行
    为了在服务器重新启动时自动建立连接,可以启用OpenVPN客户端systemd服务。在执行此操作之前,请将VPN配置文件的扩展名从更改.ovpn为.conf. 相应地替换文件名。cpkoromicha.ovpnkoromicha.conf将文件复制.conf到OpenVPN客户端配置目录/etc/openvpn/client.cpkoromicha.co......
  • 新建springboot项目,访问前端界面
    直接在IDEA中下载依赖会比较慢,将常用依赖下载到本地,然后从本地加载依赖会比较快。(方法可以搜,很多) pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&quo......
  • win10和win11关闭自动更新
    (1)win+r运行输入:regedit(2)在注册表编辑左侧栏依次展开以下目录:\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings(3)在窗口右侧空白处创建新建一个:DWORD(32位)值(4)将其重命名为:FlightSettingsMaxPauseDays(5)在双击打开,基数改为十进制,数值数字改成你想暂停的天数:例......
  • 如何关闭电脑自动更新?一招教你永久关闭!
    那么,如何关闭Windowsupdate服务呢?以联想ThinkBook14G2ITL,操作系统Windows11进行演示,不涉及app。要想彻底关闭Windows电脑的自动更新,仅仅从系统设置里面选择暂停更新是完全不够用的,只有将windows自动更新的服务关闭掉,才能有效阻止其更新。1.在win+r运行框中输入s......
  • vue前端项目启动报错:error:0308010C:digital envelope routines::unsupported
    问题描述使用 npmrundev 或者 yarnrundev 时报错:error:0308010C:digitalenveloperoutines::unsupported解决方案修改package.json,在相关构建命令之前加入setNODE_OPTIONS=--openssl-legacy-provider"scripts":{"dev":"setNODE_OPTIONS=--openssl-legacy-provide......
  • 前端笔记:React学习 1.1--配置环境
    1.1配置环境React中文文档React官网文档安装NodejsNodejs官网安装create-react-app终端执行:npmi-gcreate-react-app安装VSCode插件SimpleReactSnippetsPrettier-Codeformatter创建ReactApp在存代码的目录下创建react项目create-react-appreact-app......
  • INFINI Labs 产品更新 | 发布 Easysearch Java 客户端,Console 支持 SQL 查询等功能
    近年来,日志管理平台越来越流行。使用日志管理平台可以实时地、统一地、方便地管理和查看日志,挖掘日志数据价值,驱动运维、运营,提升服务管理效率。方案架构Beats是轻量级采集器,包括Filebeat、Metricbeat等。Easysearch是个分布式搜索引擎,提供搜集、分析、存储数据等主要功能。Con......
  • INFINI Labs 产品更新 | 发布 Easysearch Java 客户端,Console 支持 SQL 查询等功能
    近年来,日志管理平台越来越流行。使用日志管理平台可以实时地、统一地、方便地管理和查看日志,挖掘日志数据价值,驱动运维、运营,提升服务管理效率。方案架构Beats是轻量级采集器,包括Filebeat、Metricbeat等。Easysearch是个分布式搜索引擎,提供搜集、分析、存储数据等主要功......
  • 前端项目容器化(Docker)打包部署
    前端项目容器化(Docker)打包部署新建一个vue项目增加容器配置docker命令打包镜像,部署本机BiliBili视频同步发布新建vue项目使用vue官方脚手架创建一个项目下面的demo使用默认配置安装依赖并运行#使用vue脚手架创建项目npmcreatevue@latest#进入项目(假设项......