Влияет ли функция setTimeout на производительность приложения Node.js?

1

У меня есть обработчик запроса для бронирования билетов:

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

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

Теперь у меня есть маршрут, который делает бронирование, и если оплата не производится в течение 15 минут, функция тайм-аута отменяет бронирование.

Будет ли эта функция вызывать проблемы, связанные с производительностью или утечки памяти?

Теги:

2 ответа

4

Будет ли эта функция вызывать любые проблемы, связанные с производительностью...

Нет, это не будет, по крайней мере, не в том и в самом себе. Пока setTimeout ожидает вызова обратного вызова, он не блокирует. Вызов просто добавляется в очередь. В какой-то момент в будущем будет вызван обратный вызов, и вызов будет удален из этой очереди.

Тем временем вы все равно можете обрабатывать вещи.

... или утечки памяти?

Обратный вызов setTimeout находится в закрытии. Как только setTimeout вызывает обратный вызов, он становится пригодным для сбора мусора.

Если вы не получите много миллионов заказов в течение 900 000 мс, вам не о чем беспокоиться; количество курсов зависит от размера памяти, которую вы назначили вашему приложению Node.js.

Конечно, если вы получите столько запросов в секунду, у вас есть другие, более важные вещи, о которых нужно беспокоиться.

1

У него не будет проблем с производительностью или проблем с утечкой памяти, но использование функции тайм-аута на 15 минут может быть проблематичным для отладки и обслуживания.

Особенно что-то вроде отмены бронирования следует решать другим способом.

Вы всегда должны писать свое приложение-приложение таким образом, чтобы:

  • Вы можете запустить его в режиме кластера (даже если вам это не нужно по соображениям производительности)
  • То, что сбой приложения и немедленный перезапуск не приведут к значительной потере информации (здесь может возникнуть проблема с 15-минутным таймаутом)
  • То, что сбой или перезапуск приложения не приведет к несогласованному состоянию (например, ожидающее бронирование, которое больше не будет отменено)

Поэтому, предполагая, что вы уже используете базу данных для процесса бронирования, вы также должны сделать 15-минутный тайм-аут в базе данных.

  • 0
    Точка «Решить это по-другому» является правильной.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню