我有一个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次读取的费用来确认结果都是相同的值?
谢谢大家!
1条答案
按热度按时间ymdaylpp1#
每当刷新并调用get()时,您需要为10次读取付费,因为这是get()为查询返回的内容,它们是否在缓存中并不重要,因为正如您所说,仍然需要读取来确认值是否相同。
我建议您使用Streams,以便在查询中的某些内容发生更改时即时更新,而无需用户刷新。这也提高了读取效率,是最佳实践。