Как избежать избыточной загрузки данных при использовании switchMap и внутренних наблюдаемых в RxFire? - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть некоторый код RxFire, который прослушивает запрос коллекции Firestore (представляющий каналов ) и для каждого из результатов прослушивает ссылку на базу данных в реальном времени для документов (представляющую сообщения )в этом канале).

Проблема, с которой я сталкиваюсь, состоит в том, что документы базы данных реального времени перезагружаются каждый раз, когда изменяется запрос Firestore, даже если они для пути / ссылки, которая не изменилась.

Вот некоторый псевдокод:

collection(channelsQuery).pipe(

  // Emits full array of channels whenever the query changes
  switchMap(channels => {

    return combineLatest(
      channels.map(channel =>

        // Emits the full set of messages for a given channel
        list(getMessagesRef(channel)),
      ),
    );
  })
)

Представьте себе следующий сценарий:

  • Запрос изначально генерирует 3 Документы канала Firestore
  • Наблюдаемые создаются для соответствующих ссылок базы данных реального времени для тех 3 каналов, которые излучают свои документы сообщений
  • Добавляется новый документ Firestore, соответствующий исходному запросу, который теперь генерирует 4 канальные документы
  • Предыдущие наблюдаемые для базы данных реального времени уничтожаются, а новые создаются для текущего 4 чанnels, повторно загружая и испуская все данные, которые у него уже были за предыдущий 3 .

Очевидно, что это не идеально, так как вызывает много избыточных чтений в базе данных реального времени,Какова лучшая практика в этом случае?Имейте в виду, что когда канал удален, я хотел бы уничтожить соответствующую наблюдаемую вещь, которую switchMap уже делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...