我有一些node.js代码:
var start = Date.now();
setTimeout(function() {
console.log(Date.now() - start);
for (var i = 0; i < 100000; i++) {
}
}, 1000);
setTimeout(function() {
console.log(Date.now() - start);
}, 2000);
当我在我的机器上运行它时会发生奇怪的事情。我得到的时间是介于970和980之间,介于1970年到1980年之间。为什么我得到的时间早于超时时间?
答案 0 :(得分:2)
我相信你因为Date精确度而遇到这些问题。它可能因平台和浏览器而异。
Here是关于日期准确性的更详细的解读。
在某些平台上有更多高精度计时器available,但您经常需要做一些混合和匹配(检测可用的内容并相应地回归)。
答案 1 :(得分:1)
来自node.js setTimeOut
documentation:
请务必注意,您的回调可能不会被调用 在完全延迟毫秒 - Node.js不保证 回调将触发的确切时间,也不是排序 事情会发生。回调将尽可能接近 到指定的时间。
但是,有一个纳米管可以使用:
https://www.npmjs.org/package/nanotimer
一些相关问题:
但是,我认为早期+/- 30ms有点多(与大多数浏览器相比我已经玩过,它们通常不会超过10毫秒以后(只要cpu没有达到最大值,即))。