version-polling icon indicating copy to clipboard operation
version-polling copied to clipboard

自定义事件触发检测时机

Open ChinaFe opened this issue 8 months ago • 8 comments

按照示例使用自定义事件在路由跳转时触发检测,并且还配置了silentPollingInterval:true。但实际还是在做轮询。

ChinaFe avatar May 28 '25 06:05 ChinaFe

提供使用插件的代码部分。

JoeshuTT avatar May 28 '25 08:05 JoeshuTT

1.入口文件,导入并调用: import { createVersionPolling } from 'version-polling' import { ElMessageBox } from 'element-plus' export const versionPolling = () => { return createVersionPolling({ eventTriggerList: ['_getUpdate'], silent: import.meta.env.MODE === 'development', silentPollingInterval: true, onUpdate: self => { ElMessageBox.confirm('检测到系统有更新, 是否刷新页面加载最新版本?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消' }) .then(() => { self.onRefresh() }) .catch(() => { self.onCancel() }) } }) } 2.路由文件自定义触发时机 router.afterEach((to, from) => { dispatchEvent(new CustomEvent('_getUpdate')) })

ChinaFe avatar May 29 '25 05:05 ChinaFe

看调用是关闭了的。你是怎么判断出轮询还在用的呢,默认都是要5分钟一次。

JoeshuTT avatar May 29 '25 06:05 JoeshuTT

1.我每次一发布总是能立刻提醒我更新,我在页面没做任何操作。 2.虽然配置了自定义事件,但是并没有走自定义事件触发。(试过注释掉自定义事件相关配置也会第一时间提醒更新) 遵循以上两点,感觉是在轮询。 不知道是我理解有误,还是我使用不当。

ChinaFe avatar May 29 '25 11:05 ChinaFe

  1. 换成 chunhash方式试一下, 排除下可能是etag的问题。
  2. 因为立刻更新了自然不会触发后面的自定义事件更新。
  3. 轮询是在network看到多个定时发出的请求。

JoeshuTT avatar May 30 '25 01:05 JoeshuTT

换成chunhash貌似可以,但是又出现了新得问题: 部署后立刻提醒更新,点击确认后应该是走了自定义事件触发,然后又提醒一次更新

ChinaFe avatar May 30 '25 08:05 ChinaFe

  1. 可是因为你做了窗口切换也会检测更新。
  2. 点击确认刷新页面以后还会提示更新?

JoeshuTT avatar May 30 '25 08:05 JoeshuTT

是的,窗口一次,点击确认后刷新了页面应该才触发了自定义事件,所以又提示一次

ChinaFe avatar May 31 '25 01:05 ChinaFe