0

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

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

为了将其归结为最简单的可重复示例,我创建了两个 codePen,一个使用 AngularJS一个没有

要测试 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);

此代码应在 30000 的几毫秒内输出“时间:30000”或其他内容。在 Edge 中,这个时间变得不稳定并且高达 81999,但最常见的是当它发生故障时,它会在 60000 的几毫秒内报告。

当我将此代码注入我的 Web 应用程序的登录页面时,计时器在 5 到 10 次迭代后开始出现故障。这些不是轻微的异常,它们相差了 2 倍。从 30 秒开始,然后移动到 60 秒

在随附的代码笔中,它们可能运行良好,或者在短时间内或长时间后可能会出现故障。我也有 2 个同事在运行它们,但它们最终几乎都失败了。有时会下降 2 倍(达到 60 秒)并恢复到 30 秒,或者在 60 秒内停留数小时。我每隔几个小时就刷新一次页面,试图重置一些东西,看看我是否能确定一种模式,但我不能。它们很少能在这段时间内正常工作,大多数情况下它们会出现故障并卡在 60000 毫秒。

4

0 回答 0