Вступить в клуб →
средняявопросПотоки, память и производительность процесса

Экспорт миллиона строк в CSV съедает гигабайты памяти процесса

app.get('/export', async (req, res) => {
  for await (const row of db.streamOrders()) {
    res.write(toCsvLine(row));
  }
  res.end();
});

Строки из базы читаются потоком, но при медленном клиенте память процесса растёт до гигабайтов, и под убивается. Что упущено?

  • Обратное давление: res.write вернул false, но код не ждёт события drain
  • for await не работает с потоками из базы данных
  • Метод res.write можно вызывать только один раз за ответ
  • Нужно накапливать строки в массив и отправлять разом

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела