了解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年以来,它已添加到笔记中。
setTimeout
是否有任何准确的替代方案?答案 0 :(得分:3)
这主要是受到事件循环,回调队列和处理能力的影响。如果您希望精确而精确,那么您应该考虑在不以优化异步操作为基础的替代环境中进行开发。
你最接近@ 1ms的电话将是setImmediate()
和process.nextTick()
。但是,这些都不允许您指定延迟,并且您将受到事件循环的支配,但是,您不需要等待下一个循环迭代处理。
您应该阅读Node.js guide on timers and the event loop。如果在阅读之后您认为Node在其核心中提供的任何内容都不够精确,那么我将使用不同的语言/框架。