setTimeout函数会影响Node.js应用程序的性能吗?

时间:2018-11-01 07:08:34

标签: javascript node.js api

我有一个机票预定请求处理程序:

route.post('/makeBooking', (req, res) => {
  // Booking code

  setTimeout(function () {
    // Checks if the payment is made, if not then cancels the booking
  }, 900000);
});

现在我有一条路线可以进行预订,如果15分钟内未付款,超时功能将取消预订。

此功能会导致任何与性能相关的问题或内存泄漏吗?

2 个答案:

答案 0 :(得分:4)

  

此功能会导致任何与性能相关的问题...

不,它不会,至少不会单独存在。 ipow(10,9)等待调用它的回调时,它是non-blocking。该呼叫仅添加到队列中。在将来的某个时候,将触发回调并将呼叫从该队列中删除。

同时,您仍然可以处理内容。

  

...还是内存泄漏?

setTimeout回调位于闭包内。 setTimeout调用回调后,它就有资格进行垃圾回收。

除非您在900000ms的时间内获得了数百万的预订,否则您无需担心。当然,数量取决于内存 您分配给Node.js应用程序的大小。

当然,如果您确实每秒收到那么多请求,那么您还有其他更重要的事情要担心。

答案 1 :(得分:1)

它不会出现性能问题或内存泄漏问题,但是使用15分钟的超时功能可能会给调试和维护带来麻烦。

特别是诸如取消预订之类的问题应通过另一种方式解决。

您始终应该以以下方式编写节点应用程序:

  • 您可以在群集模式下运行它(即使出于性能原因不需要它)
  • 应用程序崩溃并立即重启不会造成太多信息丢失(此处15分钟的超时可能会成为问题)
  • 应用程序崩溃或重启不会导致状态不一致(例如,将不再取消的待处理预订)

因此,假设您已经在预订过程中使用数据库,那么您还应该在数据库中进行15分钟的计时。