firebase Firestore:缓存和阅读数据

w8f9ii69  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(165)

我有一个flutter应用程序运行以下查询:

Future<QuerySnapshot<Object?>> getPendingDiscoveryChats(
      String userId, DocumentSnapshot? lastDocument) async {
    QuerySnapshot result;
    if (lastDocument == null) {
      result = await FirebaseFirestore.instance
          .collection('discoveryChats')
          .where('senderId', isEqualTo: userId)
          .where('pending', isEqualTo: true)
          .orderBy('lastMessageSentDateTime', descending: true)
          .limit(10)
          .get();
    } else {
      result = await FirebaseFirestore.instance
          .collection('discoveryChats')
          .where('senderId', isEqualTo: userId)
          .where('pending', isEqualTo: true)
          .orderBy('lastMessageSentDateTime', descending: true)
          .startAfterDocument(lastDocument)
          .limit(10)
          .get();
    }
    return result;
  }

这给了我一个聊天列表。这个查询是在屏幕加载时第一次运行的,但是也有一个刷新指示器来调用更新。所以我的问题是:假设加载了10个文档,并添加了一个新文档。当刷新发生时,查询得到1个新文档和9个未更改的文档。这9个未更改的文档是来自高速缓存,还是让我付出了读取成本?
而另一种情况是在没有发生变化的情况下发生刷新。Firestore是否收取我10次读取的费用来确认结果都是相同的值?
谢谢大家!

ymdaylpp

ymdaylpp1#

每当刷新并调用get()时,您需要为10次读取付费,因为这是get()为查询返回的内容,它们是否在缓存中并不重要,因为正如您所说,仍然需要读取来确认值是否相同。
我建议您使用Streams,以便在查询中的某些内容发生更改时即时更新,而无需用户刷新。这也提高了读取效率,是最佳实践。

Stream collectionStream = FirebaseFirestore.instance.collection('users').snapshots();
Stream documentStream = FirebaseFirestore.instance.collection('users').doc('ABC123').snapshots();

相关问题