如何解决新 Edge 浏览器中的 window.setInterval 不可预测性
我正在开发一个依赖于 window.setInterval 的应用程序。我在使用新的基于 Chromium 的 Edge 浏览器时遇到了问题,我测试过的任何其他浏览器(Chrome、FF)似乎都没有出现这种问题
我注意到应用程序中的一些奇怪行为似乎与 AngularJS $interval 方法有关。
于是我开始测试原生JS window.setInterval 看问题是AngularJS还是底层原生JS。
原生 JS 方法也会出现此问题。
为了将其归结为最简单的可重复示例,我创建了两个 codePen 的 one with AngularJS 和 one without
要测试 codepen,请打开一个开发工具窗口,在第一分钟后,控制台日志将输出调用间隔回调函数之间经过的时间。
这段代码的目的是输出调用 setInterval 回调函数的时间间隔。
window.setInterval((event) => {
const lastTime = JSON.parse(window.sessionStorage.getItem("lastTime"));
const thisTime = new Date();
if (lastTime) {
const timeDiff = thisTime.getTime() - Date.parse(lastTime);
console.log("time: " + timeDiff.toString());
}
window.sessionStorage.setItem("lastTime",JSON.stringify(thisTime));
},30000);
此代码应输出“time: 30000”或在 30000 的几毫秒内的内容。 在 Edge 中,这个时间变得不稳定,高达 81999,但最常见的是,当它出现故障时,它会在 60000 的几毫秒内报告。
当我将此代码注入我的网络应用程序的登录页面时,计时器在 5 到 10 次迭代后开始出现故障。这些不是轻微异常,它们相差 2 倍。从 30 秒开始,然后移动到 60 秒
在随附的代码笔中,它们可能会正常工作,或者可能会在短时间或长时间后出现故障。我也有 2 个同事在运行它们,但他们最终几乎都失败了。有时下降 2 倍(达到 60 秒)并恢复到 30 秒,或保持 60 秒数小时。我每隔几个小时刷新一次页面,尝试重置一些东西,看看我是否可以确定一个模式,但我不能。他们很少能在这段时间内正常工作,大多数情况下他们会出现故障并卡在 60000 毫秒。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。