gpt4 book ai didi

javascript - 为什么当我的站点打开多个选项卡时我的 setTimeout 会加快?

转载 作者:数据小太阳 更新时间:2023-10-29 05:24:15 25 4
gpt4 key购买 nike

我有一个每秒倒计时的计时器。在用户打开“我的网站”的 3 或 4 个选项卡之前,它一直有效,此时最新选项卡的计时器会以两倍或三倍的速度运行。我目前只能在 IE8 中重现该错误。我之前使用的是 setInterval,并且也可以在 Firefox 中重现该错误。

我实际上使用的是 FBJS(Facebook 的 Javascript),所以我只给出一些伪代码。

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

countDown();

但是,我真正想要的是更具理论性的内容。我知道浏览器可以尝试使用 setInterval 进行“追赶”,但多个选项卡如何导致 setTimeout 的这种行为?

最佳答案

整个情况很奇怪。想到的唯一有意义的场景是浏览器试图“平滑” self 恢复 setTimeouts 的周期,与 setInterval 相同,而这样做的代码实际上混淆了不同窗口中的计时器其他。

我不知道这是否可行,尤其是涉及到 Facebook,但一个有趣的测试是为每个实例为 countDown 函数指定一个随机名称,看看这是否有任何不同,比如:

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

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

如果这改变了观察到的行为,那就证明了我想到的场景。 (并可能提供解决问题的方法。)

关于javascript - 为什么当我的站点打开多个选项卡时我的 setTimeout 会加快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1157409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com