Angular FireStore: применение snapshotChanges () к коллекции извлекает все документы в коллекции, быстро использует все разрешенные операции чтения - PullRequest
0 голосов
/ 05 августа 2020

Одна из моих коллекций в Firebase Cloud Firestore насчитывает более 1500 записей. Я показываю эти данные в сетке в моем приложении angular. Проблема в том, что всякий раз, когда я обновляю sh страницу или когда я разрабатываю приложение, поэтому при каждом изменении / сохранении оно перекомпилирует и перезагружает страницу, что делает операцию чтения 1500 документов. Я предполагал, что firebase автоматически кэширует набор результатов, а snapshotChanges () просто вернет мне новую / обновленную запись, но здесь я не вижу никакого механизма кеширования. Ниже приведен мой код, который я использую для получения данных из Firebase.

getAllProducts(): Observable<Product[]> {

    return this.firestore.collection('Products').snapshotChanges().pipe(map(actions => {

      return actions.map(x => {
        const obj: any = x.payload.doc.data();
        obj.id = x.payload.doc.id;
        return obj as Product;
      });

    }));
  }

Я думаю, что это очень распространенный вариант использования, но, скорее всего, мне что-то не хватает. Подскажите, пожалуйста, как я могу уменьшить количество операций чтения, сохранив наблюдаемую для моей коллекции в CloudFirestore?

Спасибо

1 Ответ

1 голос
/ 05 августа 2020

Я предполагал, что firebase будет автоматически кэшировать набор результатов, а snapshotChanges () просто вернет мне новую / обновленную запись

Уровень сохраняемости, предоставляемый Firestore SDK, не работает вот так.

Кэш в основном используется для поддержки запросов в автономном режиме . Если вы хотите специально использовать кеш вместо повторного запроса к серверу, вам нужно будет указать в своем запросе параметр источника .

...