node.js的setTimeout的替代方案

时间:2016-10-05 15:12:23

标签: javascript node.js timer npm

目的

了解node.js中是否有更准确的setTimeout替代方法。

背景

在制作QPS(每秒查询数)测试人员应用程序的过程中,我发现使用setTimeout越来越不准确,我需要等待的值越小。

例如,如果我呼叫setTimeout(fn, 1),我将不会等待1毫秒,而是等待一段随机时间,即尽可能接近1毫秒。 Node.js文档清楚地说明了这一点:

  

可能不会在精确延迟中调用回调   毫秒。 Node.js不保证确切的时间   什么时候回调将会触发,也不会触发它们。回调将是   尽可能接近指定的时间。

来自https://nodejs.org/api/timers.html#timers_settimeout_callback_delay_arg

实际上,这转化为等待2,3或甚至4ms,而实际上我只需要等待1ms。

总之,setTimeout的使用是不可预测的,正如另一个问题所解释的那样:

我尝试了什么?

由于setTimeout对于小值非​​常不准确,我需要一个替代方案 - 更准确的方法。

为了尝试找到这个,我到处搜索替代品,但我发现的唯一一件事就是名为perf-timers的图书馆。

这个库声称它比setTimeout更快更轻,但是没有办法确认它,因为项目的文档已经从GitHub中删除了,我相信该软件包因为没有更新而被放弃了自2012年以来,它已添加到笔记中。

问题

  1. node.js setTimeout是否有任何准确的替代方案?

1 个答案:

答案 0 :(得分:3)

这主要是受到事件循环,回调队列和处理能力的影响。如果您希望精确而精确,那么您应该考虑在不以优化异步操作为基础的替代环境中进行开发。

你最接近@ 1ms的电话将是setImmediate()process.nextTick()。但是,这些都不允许您指定延迟,并且您将受到事件循环的支配,但是,您不需要等待下一个循环迭代处理。

您应该阅读Node.js guide on timers and the event loop。如果在阅读之后您认为Node在其核心中提供的任何内容都不够精确,那么我将使用不同的语言/框架。