0
点赞
收藏
分享

微信扫一扫

C++ list容器的实现及讲解

陆佃 2023-09-25 阅读 48

 🐔 前期回顾f8e3cc1a0f694ac2b665ca2ad14c49d7.png

编写 loading、加密解密 发布NPM依赖包,并实施落地使用_彩色之外的博客-CSDN博客

目录

🌍  问题产生

🤖 性能效率

🪂 新建 autoUpdate.ts 

 🎋 在App.vue使用


🌍  问题产生

        当用户在当前站点停留时间比较长,中途站点进行升级更新之后,用户如果不刷新页面就任然停留在旧的页面里,如何让用户收到一个提示,引导用户进行更新操作呢? 

🤖 性能效率

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

🪂 新建 autoUpdate.ts 

import { ElMessageBox } from 'element-plus';

let lastScripts: string[] = [];

/* 获取html中script标签的src属性值 */
async function extractNewScripts(html: string): Promise<string[]> {
	const scriptReg = /<script.*src=["'](?<src>[^"']+)/gm;
	const result: string[] = [];
	let match;
	while ((match = scriptReg.exec(html))) {
		result.push(match.groups?.src ?? '');
	}
	return result;
}

/* 判断浏览器是否需要更新数据 */
async function needUpdate(): Promise<boolean> {
	const newScripts = await extractNewScripts(await fetch('/').then((resp) => resp.text()));
	if (!lastScripts.length) {
		lastScripts = newScripts;
		return false;
	}
	if (newScripts.length !== lastScripts.length) {
		lastScripts = newScripts;
		return true;
	}
	for (let i = 0; i < lastScripts.length; i++) {
		if (lastScripts[i] !== newScripts[i]) {
			lastScripts = newScripts;
			return true;
		}
	}
	return false;
}

/* 延时时间20s */
const DURATION = 20 * 1000;

/* 自动刷新 */
export const autoRefresh = (): void => {
	setTimeout(async () => {
		const willUpdate = await needUpdate();
		if (willUpdate) {
			ElMessageBox.confirm('页面有更新,点击确定刷新页面?', '提示', {
				confirmButtonText: '确定',
				cancelButtonText: '取消',
				type: 'warning',
			})
				.then(() => {
					location.reload();
				})
				.catch(() => {});
		} else {
			autoRefresh(); // 如果不需要更新数据,继续执行下一次判断
		}
	}, DURATION);
};

 🎋 在App.vue使用

import { autoRefresh } from '/@/utils/autoUpdate';
onMounted(() => {
	nextTick(() => {
		if (import.meta.env.MODE !== 'development') autoRefresh();
	});
});

这样当项目通过ci cd部署版本更新时候,用户就会收到更新提示

全文结束,所有代码都在文中。

7730e2bd39d64179909767e1967da702.jpeg

 _______________________________  期待再见  _______________________________ 

举报

相关推荐

0 条评论