我正在建立一个页面,用户可以在其中生成自定义计时器。这些计时器通过setTimeout在heroku nodejs后端上运行。但是,我有点担心可能同时运行数千个长时间setTimeouts。

我发现了this这样的问题,该问题指出javascript计时器是在浏览器中的单独线程上运行的。在nodejs中也是一样吗?如果是这样,在此线程上具有数千个计时器的结果是什么?

编辑:有关我正在尝试做的更多信息。我正在构建一个同步页面,该页面可以放在屏幕上,然后用户可以在浏览器中访问该页面并更改其实例上的内容。然后,这将反映在页面的所有打开的实例中。用户还应该能够设置计时器,该计时器应在计时器结束时推送新内容。这就是我正在考虑使用服务器端setTimeouts进行的操作。我知道我可能应该使用heroku Scheduler插件之一,但我想降低成本(这种页面并不完全是赚钱的)。最后,用户应该能够使用新的URL等生成自己的页面实例。这就是可伸缩性问题发挥作用的地方。如果页面的100个实例存在,并且每个实例都设置了10个计时器,那么后端将有1000个计时器。

最佳答案

基于mscdex在注释中的解释:


  timers.js的源代码很容易遵循,但是基本上发生的是,所有对具有相同到期时间/间隔的setTimeout()和setInterval()的调用都组合在一起并使用相同的后备计时器。这些setTimeout()/ setInterval()请求将按照添加顺序附加到与该计时器绑定的列表上,以便每次计时器触发时,都会迭代该列表(执行回调),直到达到尚未超时的时间过期了此时,它会等待当前时间与该组中下一个超时之间的增量。我希望这是有道理的。


我得出的结论是,有许多setTimeouts并不会影响性能,因为它们实际上都是一个计时器。只是回答自己,因为没有其他人做过。

关于javascript - 许多setTimeouts的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31500622/

10-09 17:21