BACK
Use casesBuffer analytics — батчим события
Use cases · 58

Buffer analytics — батчим события

Паттерн

Telemetry — клики, просмотры, micro-события. Их сотни в минуту. Отправлять каждый отдельным HTTP-запросом — расточительно для сети и для backend. Решение: копим в батч 30 секунд, отправляем одним запросом.

Какую проблему решаем

Императивный массив + setInterval быстро ломается: забываете flush при destroy, не справляетесь с ошибками отправки (что делать с потерянным батчем?), плохо тестируется.

Операторы и зачем они нужны

  • bufferTime(N) — копит events за окно N мс, эмитит массив.
  • filter(batch => batch.length > 0) — пустые батчи не отправляем.
  • mergeMap — отправляем батч HTTP-запросом.

Подводные камни

  • bufferTime на long-lived источнике без unsubscribe — timer работает всё время жизни сервиса. Это ок, но при page hide надо явно flush.
  • concatMap вместо mergeMap — если порядок батчей важен. Иначе mergeMap быстрее.
  • Не забывайте про лимит размера батча. Если за 30 секунд накопилось 10000 events — лучше разбить на несколько HTTP, чем один гигантский payload.

Что в итоге получаем

Лавина мелких событий превращается в несколько контролируемых сетевых отправок. Backend не задушен.

script.ts // TypeScript
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...