繁体   English   中英

Node.js和浏览器中的setTimeout / setInterval有多准确?

[英]How accurate is setTimeout/setInterval in Node.js and the browser?

我在Node.js中设置了一个计时器,该计时器等待3个小时来发出事件,一旦到达该时间,它将向所有正在监听的浏览器发出事件。

浏览器会在此类事件发生之前收集有关该事件的信息,然后计算每1秒滴答倒计时所需的剩余时间,并期望在时钟达到0时触发该事件。

所以一种使用setTimeout (Node.js),另一种使用setInterval (浏览器)每秒计数(倒数)。

我可以确定吗?

  • 倒数到0时,事件将被触发,错误范围约为1到2秒。 (浏览器)。
  • Node.js setTimeout足够准确,可以在不到1秒的错误范围内被调用。

我已经听说过500ms到1000ms的计时器是不准确的,这对于我的需求是很好的,但是我从未听说过它们会被使用这么长时间。

它们是否足够准确,还是我应该使用其他解决方案? 特别是在Node.js方面,它必须是所有这些中最准确的。

  • 替代方法是在Node.js中设置一个间隔,该间隔大约每秒运行4次,计算日期毫秒,并从事件列表中检查是否需要调用该事件。
  • 在浏览器中是设置时间间隔,以便它计算每个回调的日期ms以尝试保持时间同步。

计时器的精度将取决于事件循环在超时时的“繁忙”程度。

如果您想要这样的话就足够了:

setTimeout(done, THREE_HOURS_IN_MS);

如果事件循环在任何时间段都受阻,则您还有其他问题。

但是,如果您在倒计时的过程中每秒采样四次,那么我预计会产生很大的误差。

因此,您可能需要将两个活动(采样和倒数)保持分开,或者手动维护经过的时间。

请注意,当您的Web应用程序没有焦点时,计时器的准确性就会降低。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM