lam*_*ter 6 javascript timer settimeout setinterval fbjs
我有一个计时器,每秒倒计时.它工作得很好,直到用户打开我站点的3或4个选项卡,此时最新选项卡的计时器变为双倍或三倍速度.我目前只能重现IE8中的错误.我以前使用的是setInterval,也可以重现Firefox中的错误.
我实际上正在使用FBJS(Facebook的Javascript),所以我只会给出一些伪代码.
function countDown() {
...
setTimeout(function() { countDown() }, 1000);
}
countDown();
Run Code Online (Sandbox Code Playgroud)
但是,我真正想要的是更理论化的.我知道浏览器可以尝试使用setInterval"追赶",但是多个选项卡如何导致setTimeout的这种行为?
整个情况非常奇怪.唯一可以理解的情况是浏览器试图"平滑"自恢复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 ?>();
Run Code Online (Sandbox Code Playgroud)
如果这改变了观察到的行为,那就是我想到的场景.(并且可能提供解决问题的方法.)
| 归档时间: |
|
| 查看次数: |
2452 次 |
| 最近记录: |