前端自动检查更新,适用Vue任何版本项目,包服务端更后客户端更新

本文主要是介绍前端自动检查更新,适用Vue任何版本项目,包服务端更后客户端更新,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实现思路

  1. 请求当前项目根路径
  2. 提前文件中的标签路径
  3. 对比路径和刷新页面

按上思路不做优化项自动更新效率不足50%

  • 优化项
  • 剔除浏览器插件引入的JS包到项目里面,增加对比标签数量,和防止有浏览器插件用户无限刷新
  • 剔除 http 网路地址协议的JS标签路径,减少对比干扰,和其它BUG
  • 对比当前打开页面路径和请求回来的根页面的 JS 标签和路径,大大提高更新后的刷新率(100%更新刷新)
  • 页面切换后台时停止检查更新 (阻止无效的JS逻辑)

完整代码 复制即用

const _window = window as any;/* 是否在弹框状态 */
let timeoutID: any = 0, isMessageBox = false;const WithdrawLinks = async (html: string): Promise<string[]> => {/* 这段正则全局匹配可以放到外面去,注意lastIndex即可 */const scriptReg = /<script.*src=["'](?<src>[^"']+)/gm;const linkReg = /<link.*href=["'](?<href>[^"']+)/gm;let result: Array<string> = [], link: Array<string> = [], match: any;while ((match = scriptReg.exec(html))) {result.push(match.groups.src);}while ((match = linkReg.exec(html))) {link.push(match.groups.href);}const eliminate = <T>(result: string[]): string[] => {let filterList: string[] = [];filterList = result.filter((element) => !element.startsWith('chrome-extension://'));filterList = result.filter((element) => !element.match(/^http(s?):\/\/[^ ]+/g));return filterList}return [...eliminate(link), ...eliminate(result)];}// 检查更新
async function CheckForUpdates() {const HaulAwayHTML = await WithdrawLinks(await fetch('/').then(resp => resp.text()));const renderHTML = await WithdrawLinks(document.documentElement.innerHTML)let result = false;console.log(HaulAwayHTML, renderHTML);if (renderHTML.length !== HaulAwayHTML.length) {result = true;} else {for (let i = 0; i < HaulAwayHTML.length; i++) {if (renderHTML[i] !== HaulAwayHTML[i]) {result = true;break;}}}return result;
}document.addEventListener("visibilitychange", function () {const status = document.visibilityStateif (status === 'hidden') {timeoutID && clearTimeout(timeoutID);timeoutID = null;} else if (status === 'visible') {!isMessageBox && autoRefresh();}
});// 调用即可
export const autoRefresh = async () => {timeoutID = setTimeout(async () => {const willUpdate = await CheckForUpdates();if (willUpdate) {clearTimeout(timeoutID);isMessageBox = true;const confirm: boolean = window.confirm('页面有更新,点击确定刷新页面?')if (confirm) { _window.location.reload(true); } else {isMessageBox = false;autoRefresh();}} else {autoRefresh();}}, 10000);
}

这篇关于前端自动检查更新,适用Vue任何版本项目,包服务端更后客户端更新的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/378813

相关文章

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种