gpt4 book ai didi

javascript - Firefox 过早调用 setTimeout 函数(或 Date.getTime() 已关闭?)

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

我在 Firefox 12 中遇到了一个奇怪的问题。setTimeout() 似乎并不总是等待适当的长度。或者可能是日期的毫秒数不一致?

Check out this fiddle.本质上,100 毫秒的 setTimeout 似乎在 80 毫秒到 110 毫秒之间的任何地方运行。更多我能理解的,基于John Resig's explanation of timers .但是更少?

您可能需要刷新一次或两次才能看到问题,因为它有时在第一次运行时工作正常。它似乎在 IE 和 Chrome 中运行得很好。

这是我在 fiddle 中使用的代码:

var txt = '',
TIMEOUT_LENGTH = 100,
_now;

now = Date.now || function() { return new Date().getTime() };

function log(time) {
c = time < 100? 'class="error"' : '';
$('#log').append('<p '+c+'>waited ' + time + '</p>');
}

function defer() {
var d = $.Deferred(),
start = now();
setTimeout(function() {
d.resolve(now() - start);
}, TIMEOUT_LENGTH);
return d.promise();
}

for (var i = 0; i < 20; i++) {
defer().then(log);
}

这是一个奇怪的输出示例:

enter image description here

这是我的浏览器信息:

enter image description here

非常感谢您阅读我的问题!我希望有人可以阐明这一点。

更多信息

我解决了这个问题,方法是使用 setInterval() 并检查每个增量以查看所需时间是否已过。 See this fiddle .

但是,我仍然很想知道是否有人可以阐明问题的根源

最佳答案

是的。 setTimeout 的准确性基于许多因素,不能保证始终在您指定的准确时间执行。

我不能以任何权威的方式这样说,但我敢猜测,为了看起来更快,Firefox 会暂时加速 JS 引擎以使一切运行起来(这很有趣,因为根据我的经验,在我的 firefox 版本中,基于计时器的函数最初实际上运行速度较慢。

setTimeoutsetInterval 都没有 promise 它们会在正确的时间执行,正如您发布的链接所述。然而,使用 setInterval,您可以获得定时器循环的好处,如果它落后太多,它会通过追赶来“ self 纠正”,所以无论您尝试做什么,它可能更合适。

无论如何,这是我在 Macbook 10.6.8 上的结果:

火狐 5.0.1:

waited 92
waited 92
waited 93
waited 93
waited 93
waited 93
waited 93
waited 94
waited 93
waited 93
waited 93
waited 93
waited 94
waited 94
waited 94
waited 94
waited 94
waited 95
waited 96
waited 96

Safari 5.1.5:

waited 100
waited 104
waited 104
waited 103
waited 104
waited 104
waited 104
waited 104
waited 104
waited 104
waited 104
waited 104
waited 104
waited 104
waited 104
waited 104
waited 104
waited 104
waited 104
waited 104

Chrome 19.0.1084.52:

waited 101
waited 103
waited 103
waited 104
waited 104
waited 103
waited 103
waited 103
waited 103
waited 103
waited 103
waited 103
waited 103
waited 103
waited 104
waited 104
waited 104
waited 104
waited 104
waited 104

关于javascript - Firefox 过早调用 setTimeout 函数(或 Date.getTime() 已关闭?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10875370/

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