【发布时间】:2019-09-15 09:28:28
【问题描述】:
我有一个简单的 setTimeout 用法:
var oldDate = new Date().getTime();
setInterval(function(){
var newDate = new Date().getTime();
console.log(newDate - oldDate, 'ms');
oldDate = newDate;
}, 7);
这在带有 Node(v10.15.2) 的 Linux 系统上打印:
8 'ms'
6 'ms'
8 'ms'
7 'ms'
8 'ms'
8 'ms'
但是在带有 Node(v10.15.1) 的 Windows 系统上:
21 'ms'
22 'ms'
20 'ms'
20 'ms'
17 'ms'
23 'ms'
18 'ms'
20 'ms'
22 'ms'
17 'ms'
17 'ms'
22 'ms'
19 'ms'
20 'ms'
23 'ms'
19 'ms'
30 'ms'
这绝对是一团糟,而且运行非常随机。
我需要一个精确且无阻塞的计时器。在 linux 中它就像一个魅力,但我很好奇,为什么它在 windows 中如此糟糕?
谢谢!
【问题讨论】:
-
旁注:
new Date().getTime()更简单、更高效的版本是Date.now()。 -
在 Javascript 中没有精确的、抢先的计时器这样的东西。定时器回调是基于事件的。当计时器触发时,它会在事件队列中插入一个事件。该事件将在轮到它时运行,当在它之前发生的其他事件完成处理时。这可能接近也可能不接近计时器的分配时间。
-
这看起来有点像X/Y problem。为什么你需要它比上面的更精确?
-
实际上我正在制作一个需要稳定运行 60fps 的游戏服务器,所以我需要一个稳定的计时器 :) @T.J.Crowder
标签: node.js timer settimeout