node.js的setTimeout的替代方法

Fla*_*nix 4 javascript timer node.js npm

目的

发现setTimeout在node.js中是否还有更准确的替代方法。

背景

在制作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

pet*_*teb 5

这主要是由于受事件循环,其回调队列和您的处理能力的支配。如果您希望在某个特定时刻执行,那么也许您应该考虑在并非围绕优化异步操作构建的替代环境中进行开发。

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

您应该阅读有关计时器和事件循环Node.js指南。如果在阅读后您认为Node核心提供的任何内容都不足够精确,那么我会考虑使用其他语言/框架。