很多setTimeouts的结果

时间:2015-07-19 11:18:59

标签: javascript node.js settimeout

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

我发现了this SO问题,其中指出javascript计时器是在浏览器中的单独线程上运行的。 nodejs中的情况是一样的吗?如果是这样,在这个线程上拥有数千个计时器的后果是什么?

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

1 个答案:

答案 0 :(得分:1)

根据评论中的mscdex解释:

  

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

我得出结论,有很多setTimeout对性能没有害处,因为它们都是一个计时器。只是回答自己,因为没有其他人这样做。