繁体   English   中英

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

[英]Does setTimeout function affect the performance of Node.js application?

我有一个订票请求处理程序:

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

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

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

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

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

不,它不会,至少它本身不会。 虽然setTimeout正在等待调用它的回调,但它是非阻塞的 呼叫被简单地添加到队列中。 在将来的某个时刻,回调会触发,并且该调用将从该队列中删除。

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

……还是内存泄漏?

setTimeout回调位于闭包内。 一旦setTimeout调用回调,它就可以进行垃圾回收。

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

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

它不会有性能问题或内存泄漏问题,但使用 15 分钟超时功能可能会导致调试和维护问题。

特别是取消预订之类的事情应该以另一种方式解决。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM