Как стать автором
Обновить

RxJS: Почему shareReplay(1) может вызывать утечки памяти

Если вы используете shareReplay(1) в RxJS, будьте осторожны — в некоторых случаях это может привести к утечкам памяти! Давайте разберёмся, почему так происходит и как это исправить.

❌ Проблема с shareReplay(1). По умолчанию:

  • Сохраняет последнее значение в бесконечном буфере, даже если подписчиков больше нет

  • Не отписывается от источника, когда никто не слушает (например, interval, Subject, HTTP-запросы)
    Это означает, что данные могут накапливаться, а ненужные Observable продолжают работать в фоне

✅ Решение: shareReplay({ bufferSize: 1, refCount: true })

  • Добавление refCount: true решает проблему:

  • Автоматически отписывается, когда не остаётся подписчиков

  • Очищает буфер, предотвращая утечки памяти

💡 Ключевые выводы:

  1. shareReplay(1) - Может оставлять "висящие" подписки

  2. shareReplay({ bufferSize: 1, refCount: true }) - Безопасная альтернатива

Я обнаружил эту проблему во время code review вчера, а впервые узнал о ней из видео Dmytro Mezhenskyi.

🔗 P.S. Самое время быстро исправить это в наших проектах!)

Больше об 🅰️ngular в моём Telegram-канале

Теги:
0
Комментарии0

Публикации

Работа

Ближайшие события