RxJS: Почему shareReplay(1) может вызывать утечки памяти
Если вы используете shareReplay(1) в RxJS, будьте осторожны — в некоторых случаях это может привести к утечкам памяти! Давайте разберёмся, почему так происходит и как это исправить.
❌ Проблема с shareReplay(1). По умолчанию:
Сохраняет последнее значение в бесконечном буфере, даже если подписчиков больше нет
Не отписывается от источника, когда никто не слушает (например, interval, Subject, HTTP-запросы)
Это означает, что данные могут накапливаться, а ненужные Observable продолжают работать в фоне
✅ Решение: shareReplay({ bufferSize: 1, refCount: true })
Добавление refCount: true решает проблему:
Автоматически отписывается, когда не остаётся подписчиков
Очищает буфер, предотвращая утечки памяти

💡 Ключевые выводы:
shareReplay(1) - Может оставлять "висящие" подписки
shareReplay({ bufferSize: 1, refCount: true }) - Безопасная альтернатива
Я обнаружил эту проблему во время code review вчера, а впервые узнал о ней из видео Dmytro Mezhenskyi.
🔗 P.S. Самое время быстро исправить это в наших проектах!)
Больше об 🅰️ngular в моём Telegram-канале