version-polling一款用于实时检测 web 应用更新的 JavaScript 库

为了解决后端部署之后,如何通知用户系统有新版本,并引导用户刷新页面以加载最新资源的问题。

实现原理

1.使用 Web Worker API 在浏览器后台轮询请求页面,不会影响主线程运行。
2.命中协商缓存,对比本地和服务器请求响应头etag字段值。
3.如果etag值不一致,说明有更新,则弹出更新提示,并引导用户手动刷新页面(例如弹窗提示),完成应用更新。
4.当页面不可见时(例如切换标签页或最小化窗口),停止实时检测任务;再次可见时(例如切换回标签页或还原窗口),恢复实时检测任务。

本地项目安装

npm install version-polling --save

使用

// 在应用入口文件中使用: 如 main.js, app.jsx
import { createVersionPolling } from "version-polling";createVersionPolling({appETagKey: "__APP_ETAG__",pollingInterval: 5 * 1000, // 单位为毫秒silent: process.env.NODE_ENV === "development", // 开发环境下不检测onUpdate: (self) => {// 当检测到有新版本时,执行的回调函数,可以在这里提示用户刷新页面const result = confirm("页面有更新,点击确定刷新页面!");if (result) {self.onRefresh();} else {self.onCancel();}// 强制更新可以用alert// alert('有新版本,请刷新页面');},
});

通过 script 引入,直接插入到 HTML

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>前端页面自动检测更新-示例</title></head><body><script src="//unpkg.com/version-polling/dist/version-polling.min.js"></script><script>VersionPolling.createVersionPolling({appETagKey: "__APP_ETAG__",pollingInterval: 5 * 1000,onUpdate: (self) => {// 当检测到有新版本时,执行的回调函数,可以在这里提示用户刷新页面const result = confirm("页面有更新,点击确定刷新页面!");if (result) {self.onRefresh();} else {self.onCancel();}},});</script></body>
</html>

在这里插入图片描述

注意事项

version-polling 需要在支持 web worker 和 fetchAPI 的浏览器中运行,不支持 IE 浏览器
version-polling 需要在 web 应用的入口文件(通常是 index.html)中引入,否则无法检测到更新
version-polling 需要在 web 应用的服务端配置协商缓存,否则无法命中缓存,会增加网络请求
version-polling 需要在 web 应用的服务端保证每次发版后,index.html 文件的 etag 字段值会改变,否则无法检测到更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/631691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

取消lodash.throttle中的默认执行完最后一次函数

我的场景: 我有一个列表,我考虑用户连续点击删除的情况&#xff0c;如果用户连续点击&#xff0c;可能会导致数据库中的数据被删除了&#xff0c;但是我还需要刷新数据列表才能反应到页面上&#xff0c;可是这时候用户又点击了同一条数据的删除按钮多次&#xff0c;导致发起了…

第二讲_HarmonyOS应用创建和运行

HarmonyOS应用创建和运行 1. 创建一个HarmonyOS应用2. 运行新项目2.1 创建本地模拟器2.2 启动本地模拟器2.3 在本地模拟器运行项目 1. 创建一个HarmonyOS应用 打开DevEco Studio&#xff0c;在欢迎页单击Create Project&#xff0c;创建一个新工程。 选择创建Application应用。…

服务器运维小技巧(一)——如何进行远程协助

服务器运维中经常会遇到一些疑难问题&#xff0c;需要安全工程师&#xff0c;或者其他大神远程协助。很多人会选择使用todesk或者向日葵等一些远控软件。但使用这些软件会存在诸多问题&#xff1a; 双方都需要安装软件&#xff0c;太麻烦需要把服务器的公钥/密码交给对方不知道…

【计算机硬件】2、指令系统、存储系统和缓存

文章目录 指令系统计算机指令的组成计算机指令执行过程指令的寻址方式&#xff08;怎么样找到操作数&#xff1f;&#xff09;1、顺序寻址2、跳跃寻址 指令操作数的寻址方式&#xff08;怎么样找到操作数&#xff1f;&#xff09;1、立即寻址方式2、直接寻址方式3、间接寻址方式…

鸿蒙开发-UI-布局-弹性布局

地方 鸿蒙开发-UI-布局 鸿蒙开发-UI-布局-线性布局 鸿蒙开发-UI-布局-层叠布局 文章目录 前言 一、基本概念 二、布局方向 1、主轴为水平方向 2、主轴为垂直方向 三、布局换行 四、对齐方式 1、主轴对齐方式 2、交叉轴对齐方式 2.1、容器组件设置交叉轴对齐 2.2、子组件设置交叉…

常见框架漏洞

1.什么是框架 Web框架(Web framework)或者叫做Web应用框架(Web application framework)&#xff0c;是用于进行Web开发的一套软件架构。大多数的Web框架提供了一套开发和部署网站的方式。为Web的行为提供了一套支持的方法。使用Web框架&#xff0c;很多的业务逻辑外的功能不需…

RT-Thread 瑞萨 智能家居网络开发:RA6M3 HMI Board 以太网+GUI技术实践

以太网HMI线下培训-环境准备 R A 6 M 3 H M I − B o a r d \textcolor{#4183c4}{RA6M3 HMI-Board} RA6M3HMI−Board 本次培训将使用&#xff0c;由RT-Thread与瑞萨电子及LVGL官方合作推出的一款高性价比图形评估套件。它采用了瑞萨电子的高性能RA6M3芯片&#xff0c;具备2D的…

【C语言编程之旅 3】刷题篇-函数

第一题 解析 数组的下标是从0开始的。 需要注意的是D&#xff1a;int a[] {1,2,3},数组可以通过初始化确定大小。 第二题 解析 B,数组的大小必须是常量 第三题 解析 /* 解题思路&#xff1a;本题目主要是考察函数的声明定义&#xff0c;题目比较简单&#xff0c;请参考以…

如何在Linux运行RStudio Server并实现Web浏览器远程访问

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. …

腊八节公益活动总结

春雨公益志愿服务队联合水城路社区红帆支部服务队于腊八节开展了公益活动&#xff0c;为环卫工人送上了热气腾腾的八宝粥以及新年福字。此次活动旨在为环卫工人营造温馨、充满爱心的氛围&#xff0c;让他们在冬日里感受到社会的温暖和关爱。 活动当天&#xff0c;志愿者们早早地…

C语言之【函数】篇章以及例题分析

文章目录 前言一、函数是什么&#xff1f;二、C语言中函数的分类1、库函数2、自定义函数 三、函数的参数1、实际参数&#xff08;实参&#xff09;2、形式参数&#xff08;形参&#xff09; 四、函数的调用1、传值调用2、传址调用3、专项练习3.1 素数判断3.2 闰年判断3.3 二分查…

ARM 1.16

TCP的特点 面向连接 面向连接&#xff0c;是指发送数据之前必须在两端建立连接。建立连接的方法是“三次握手”&#xff0c;这样能建立可靠的连接。建立连接&#xff0c;是为数据的可靠传输打下了基础。 仅支持单播传输 每条TCP传输连接只能有两个端点&#…

21. 合并两个有序链表(Java)

题目描述&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入&#xff1a; l1 [1,2,4], l2 [1,3,4] 输出&#xff1a; [1,1,2,3,4,4] 代码实现&#xff1a; 结点类&#xff1a; public class ListNode {in…

自动化测试总结

1.什么是自动化测试 以程序测试程序&#xff0c;以代码代替思维&#xff0c;以脚本的运行代替手工测试。自动化的测试涵盖了&#xff1a;功能&#xff08;黑盒&#xff09;自动化测试&#xff0c;功能&#xff08;白盒&#xff09;自动化测试&#xff0c;性能测试&#xff0c;…

YOLOv8改进 | Conv篇 | 在线重参数化卷积OREPA助力二次创新(提高推理速度 + FPS)

一、本文介绍 本文给大家带来的改进机制是一种重参数化的卷积模块OREPA,这种重参数化模块非常适合用于二次创新,我们可以将其替换网络中的其它卷积模块可以不影响推理速度的同时让模型学习到更多的特征。OREPA是通过在线卷积重参数化(Online Convolutional Re-parameteriza…

低代码开发:解锁数字化转型新维度

在信息化浪潮中&#xff0c;企业正面临着前所未有的挑战与机遇。一方面&#xff0c;市场环境瞬息万变&#xff0c;业务需求迭代频繁&#xff0c;对快速应用开发提出了更高要求&#xff1b;另一方面&#xff0c;传统软件开发模式受限于高成本、长周期等瓶颈&#xff0c;难以满足…

【备战蓝桥杯】探索Python内置标准库collections的使用

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-q0zvWxZtAIdSGZ8R {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

用3D渲染效果图时,需要注意什么?

要用3D渲染效果图&#xff0c;您需要使用3D建模软件来创建三维模型、材质、灯光和相机等元素&#xff0c;并使用渲染引擎将它们渲染成逼真的图像。那么用3D渲染效果图需要注意什么? 在用3D渲染效果图时&#xff0c;您需要注意以下几点&#xff1a; 1、模型精度&#xff1a;模型…

【HTML】-- 01 初识HTML

HTML 1.初识HTML Hyper Text Markup Language&#xff1a;超文本标记语言 1.1 W3C标准 W3C World Wide Web Consortium(万维网联盟)成立于1994年&#xff0c;Web技术领域最权威和最具影响力的国际中立性技术标准机构http://www.w3.org/http://www.chinaw3c.org/ W3C标准包括…

如何批量修改文件名顺序编号?

如何批量修改文件名顺序编号&#xff1f;批量修改文件名顺序编号&#xff0c;指的是对多个文件名进行统一的修改&#xff0c;为每个文件名添加一个顺序编号。例如&#xff0c;将文件夹中的一组文件从"file1", "file2", "file3" 修改为 "001…