-->

为什么我的setTimeout加快,当我有多个选项卡打开我的网站?(Why does my setT

2019-07-30 11:59发布

我有一个倒计时每一秒的计时器。 直到用户打开3个或4选项卡中的我的网站,在这一点的最新标签的时间走完两倍或三倍的速度它的伟大工程。 我目前只可以重现这个bug在IE8。 我以前使用的setInterval,并能复制Firefox中的错误也是如此。

实际上,我使用FBJS(Facebook的JavaScript)的,所以我就放弃了一些伪代码。

function countDown() {
  ...
  setTimeout(function() { countDown() }, 1000);    
}

countDown();

然而,就是我真正需要的是更多的理论。 我知道浏览器可以尝试玩“赶上”的setInterval,但多个选项卡是如何导致这种行为的setTimeout?

Answer 1:

这整个情况是非常奇怪的。 这是未来想到它使任何意义,唯一的方案是一个在浏览器尝试“平稳”自我复原一个定时器,相同的setInterval的时期,而这这样做,实际上是混淆在不同的窗口,每个定时器的代码其他。

我不知道这是否是可行的,尤其是与Facebook有关,但一个有趣的测试将是给每个实例随机名称为countDown的功能,看看是否有什么差别,如:

<?php $timerTag = rand(1, 1000); ?>
function countDown<?php echo $timerTag ?>() {
  ...
  setTimeout(function() { countDown<? php echo $timerTag ?>() }, 1000);    
}

countDown<?php echo $timerTag ?>();

如果这改变所观察到的行为,即主张我心目中的情景。 (和可能提供解决问题的方法。)



文章来源: Why does my setTimeout speed up when I have multiple tabs open to my site?