新 Edge 浏览器中的 window.setInterval 不可预测性

问题描述

我正在开发一个依赖于 window.setInterval 的应用程序。我在使用新的基于 Chromium 的 Edge 浏览器时遇到了问题,我测试过的任何其他浏览器(Chrome、FF)似乎都没有出现这种问题

我注意到应用程序中的一些奇怪行为似乎与 AngularJS $interval 方法有关。
于是我开始测试原生JS window.setInterval 看问题是AngularJS还是底层原生JS。
原生 JS 方法也会出现此问题。

为了将其归结为最简单的可重复示例,我创建了两个 codePen 的 one with AngularJSone 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 (将#修改为@)