У меня есть обработчик запроса для бронирования билетов:
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
вызывает обратный вызов, он становится пригодным для сбора мусора.
Если вы не получите много миллионов заказов в течение 900 000 мс, вам не о чем беспокоиться; количество курсов зависит от размера памяти, которую вы назначили вашему приложению Node.js.
Конечно, если вы получите столько запросов в секунду, у вас есть другие, более важные вещи, о которых нужно беспокоиться.
У него не будет проблем с производительностью или проблем с утечкой памяти, но использование функции тайм-аута на 15 минут может быть проблематичным для отладки и обслуживания.
Особенно что-то вроде отмены бронирования следует решать другим способом.
Вы всегда должны писать свое приложение-приложение таким образом, чтобы:
Поэтому, предполагая, что вы уже используете базу данных для процесса бронирования, вы также должны сделать 15-минутный тайм-аут в базе данных.