纯前端umi项目部署页面自动刷新

背景

在用户正在访问单页面网站的情况下,突然发布了新的版本。而由于单页面中路由特性,或浏览器缓存的原因,并不会随着路由变化而重新加载前端资源,此时用户浏览器所运行的脚本,并非是最新的代码,从而可能引发一些问题。因此所引发了思考。如何在后端部署之后,提醒用户系统的版本更新,并且引导用户刷新页面,获取最新资源。

纯前端实现思路

可通过前端接收最新的版本信息,并且与本地的登陆时所保存的版本信息来进行比较,可使用轮训、websocket等技术来完成。

唯一hash值

  1. hash文件的生成
    创建hash.js文件,生成一个唯一值用于标识当前版本

const crypto = require('crypto');
const fs = require('fs');
const data = crypto.randomBytes(16).toString('hex');
const hash = crypto.createHash('sha256').update(data).digest('hex');
fs.writeFile('./build/hash.txt', hash, (err) => {if (err) throw err;
});

修改package.json下的build命令

 "build": "umi run build && node ./hash.js",
  1. 判断时机

如果发版是在用户不常用的时间段,可以在浏览器visibility切换的回调 + 路由切换拦截时,这2个时机判断版本号,基本上完全够用了

//app.jsx
import request from 'umi-request';const getHash = () => {return request(`/hash.txt`);
};
//umi里getInitialState函数用于项目初始化时获取用户信息,这个时机可以添加逻辑进行判断
export async function getInitialState() {const data = await getHash();document.addEventListener('visibilitychange', async () => {console.log(document.visibilityState);if (document.visibilityState === 'visible') {const newdata = await getHash();if (data !== newdata) {window.location.reload();}} });return {collapsed: false,hash: data,userInfo: currentUserResult?.body || {},};
}
export const layout = ({ location, initialState, setInitialState }) => {return {onPageChange: async (location) => {const data = await getHash();if (data !== initialState.hash) {window.location.reload();}},onCollapse: (arg) => {setInitialState({...initialState,collapsed: arg,});},...initialState?.settings,};
};

纯前端umi项目部署页面自动刷新
原文链接:https://juejin.cn/post/7358665606914277376

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

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

相关文章

img标签图片未加载完成占位图

通过Css控制,实现加载接口下发或者网络图片时,未加载完成前,先加载本地一张占位图,记载完成显示接口下发的图或者网络图。 实现方式:通过在img标签的after伪元素上添加一张占位图,并且img标签都设置为posi…

记录Python的pandas库详解

如何生成一个pd import pandas as pd df pd.DataFrame([[1,2,3],[4,5,6]],index[A,B],columns[C1,C2,C3])df ---------------------------------------------------------------------------C1 C2 C3 A 1 2 3 B 4 5 6df.T -------------------------------------------------…

爬虫 新闻网站 以湖南法治报为例(含详细注释) V4.0 升级 自定义可任意个关键词查询、时间段、粗略判断新闻是否和优化营商环境相关,避免自己再一个个判断

目标网站:湖南法治报 爬取目的:为了获取某一地区更全面的在湖南法治报的已发布的和优化营商环境相关的宣传新闻稿,同时也让自己的工作更便捷 环境:Pycharm2021,Python3.10, 安装的包:requests&a…

element-ui container 组件源码分享

今日简单分享 container 组件的源码实现,从以下两个方面来讲解: 1、container 组件的页面结构 2、container 组件的属性 一、container 组件的页面结构 二、container 组件的属性 1、container 部分的 direction 属性,子元素的排列方向&am…

Nacos2.3.0安装部署

一,准备安装包 github下载点 二,在/usr/local/目录下创建一个文件夹用于上传和解压Nacos cd /usr/local/ #上传Nacos文件 #解压之前cd进安装包根目录 cd /usr/local/ #这边选择的Nacos版本为2.3.0 tar -zxxvf nacos-server-2.3.0.tar.gz #把该文件移动…

Spring Boot安装与配置

一、引言 Spring Boot是一个开源的Java框架,用于简化Spring应用的创建、运行和部署过程。它遵循“约定优于配置”的原则,使得开发者能够更专注于业务逻辑的实现,而非繁琐的配置。本教程将指导您完成Spring Boot的安装和配置过程,…

基于SpringBoot的“商务安全邮箱”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“商务安全邮箱”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构 收件箱效果图 草稿箱效果图 已发送…

【数据结构】习题之消失的数字和轮转数组

👑个人主页:啊Q闻 🎇收录专栏:《数据结构》 🎉前路漫漫亦灿灿 前言 消失的数字这道题目我会和大家分享三种思路。 还有一道题目是轮转数组,,也会分享三种思路,大…

常见的垃圾回收器(下)

文章目录 G1ShenandoahZGC 常见垃圾回收期(上) G1 参数1: -XX:UseG1GC 打开G1的开关,JDK9之后默认不需要打开 参数2:-XX:MaxGCPauseMillis毫秒值 最大暂停的时间 回收年代和算法 ● 年轻代老年代 ● 复制算法 优点…

Methoxy PEG Propionic acid具有良好的亲水性和分子量可控性

【试剂详情】 英文名称 mPEG-PA,mPEG-Propionic acid, Methoxy PEG PA, Methoxy PEG Propionic acid 中文名称 聚乙二醇单甲醚丙酸, 甲氧基-聚乙二醇-丙酸 外观性状 由分子量决定,固体或者液体 分子量 400&…

如何提高直线模组的技术水平?

在工业制造业中,不管我们使用任何机械产品,都有一个共同的出发点,就是能用先进的技术突破其产品的性能及使用性。那么直线模组究竟是用什么技术突破其产品的使用性的呢? 1、优化机械设计:设计过程中应充分考虑模组的结…

JetBrains2024来袭

JetBrains2024来袭,激活包含在内的编程IDE,其中AppCode已下架,Aqua,RustRover不支持本地激活需要关联帐号。 Tap:激活稳定可靠,支持Windows,macOS,Linux客户端。

使用django model 建立一个机房巡检记录表

作为一名it管理人员,日常工作中的一项就是巡检机房了,通常需要记录到本子上,或者说叫登记表。 from django.db import modelsclass InspectionRecord(models.Model):STATUS_CHOICES = ((正常, 正常),(异常

阿里云大学考试python中级题目及解析-python中级

阿里云大学考试python中级题目及解析 1.WEB开发中,下列选项中能够实现客户端重定向的设置是() A.响应头设置Location状态码200 B.响应头设置Location状态码302 C.响应头设置Accept-Location状态码301 D.响应头设置Accept-Location状态码…

C语言【指针】

1. 基本语法 1.1 指针变量的定义和使用(重点) 指针是一种数据类型,指针变量指向谁 就把谁的地址赋值给指针变量 1.2 通过指针间接修改变量的值 指针变量指向谁 就把谁的地址赋值给指针变量 可以通过 *指针变量 间接修改变量的值 1.3 const修饰的指针变量 语法…

全视通院内导航助力“医”路畅通,让您就医不迷路

“这个科室怎么走?”“CT检查在哪里做?”“请问抽血在哪里?”…… 这是患者在赴院就诊时常会发出的疑问,医院导诊台及其他区域的工作人员对此应接不暇,繁忙时段更容易顾此失彼,不仅自身工作负担大&#xf…

stable diffusion基本原理

diffusion model latent diffusion :先对图片降维,然后在降维空间做diffusion;stable diffusion即基于此方法实现的,因此计算量很小; 共用降噪网络U-Net:输入noisy imagestep,告诉网络当前的噪声…

scipy.signal.cwt, pywt.cwt, ssq_cwt 使用记录

scipy.signal.cwt 该代码中widths以及freq计算公式来源于scipy.signal.morlet2函数官方案例 from scipy.signal import morlet, morlet2 from scipy import signal import matplotlib.pyplot as pltsignal_length 2000 fs 1000# 生成信号数据 time np.arange(0, signal_leng…

全新付费进群系统源码 带定位完整版 附教程

搭建教程 Nginx1.2 PHP5.6-7.2均可 最好是7.2 第一步上传文件程序到网站根目录解压 第二步导入数据库(dkewl.sql) 第三步修改/config/database.php里面的数据库地址 第四步修改/config/extra/ip.php里面的域名 第四步设置伪静态thinkphp 总后台账…

MySQL死锁与死锁检测

一、什么是MySQL死锁 MySQL中死锁是指两个或多个事务在互相等待对方释放资源,导致无法继续执行的情况。 MySQL系统中当两个或多个事务在并发执行时,就可能会遇到每项事务都持有某些资源同时又请求其他事务持有的资源,从而形成事务之间循环等…