Google Firestore 是缓存文档和集合还是总是请求新的?

Posted

技术标签:

【中文标题】Google Firestore 是缓存文档和集合还是总是请求新的?【英文标题】:Does Google Firestore cache documents and collections or does it always request new ones? 【发布时间】:2020-11-18 14:35:38 【问题描述】:

我有一个单页 Web 应用程序,但我没有启用离线持久性。

此应用程序中的一个组件已使用onSnapshot 函数订阅了一个文档并收到了更新。

同一应用程序实例中的另一个组件使用get 函数读取同一文档。 firebase 是否会提供已在订阅中加载的相同文档实例?还是会向服务器发出新请求?

同一个应用程序实例中的第三个组件订阅同一个文档。这会触发对服务器的新请求吗?

阅读和订阅合集怎么样?

订阅一个已经订阅的集合,但在使用where 函数缩小结果后调用第二个订阅怎么办? Firestore 会在我的客户端实例中重用已加载的完整集合和过滤器吗?还是会发出服务器请求?

【问题讨论】:

Witek:LeadDreamer 的信息对您有帮助吗? 【参考方案1】:

通常,Firestore 会维护一个本地缓存,主要是为了延迟/响应,而不是为了节省成本。也就是说,如果可以从缓存中读取文档,那么它将保存读取。但是,我不会尝试“设计”它。内存限制和其他考虑意味着并不真正知道缓存中有什么,也不应该知道。

如果这种性能/成本对您很重要,最好将 Firestore 与 Redux(我这样做)之类的东西结合起来,以维护本地文档“集”以减少往返调用,并且让 Redux 保持最新状态的侦听器。

【讨论】:

【参考方案2】:

是的。 Firebase 将文档和集合存储在缓存中。当您离线时,您可以访问数据的缓存副本。您还可以管理文档和集合的缓存副本。

阅读此官方文档了解更多信息

https://firebase.google.com/docs/firestore/manage-data/enable-offline

【讨论】:

参考文档解释了持久/持久缓存。这在离线时启动。但是当我不离线时怎么办?或者当离线持久性被禁用时? Firestore 是否在内存中缓存订阅的文档?还是同一文档的两次订阅意味着我要求(并支付)两次? 通常,Firestore 会维护一个本地缓存,主要是为了延迟/响应,而不是为了节省成本。也就是说,如果可以从缓存中读取文档,那么它将保存读取。但是,我不会尝试“设计”它。内存限制和其他考虑意味着并不真正知道缓存中有什么,也不应该知道。 如果这种性能/成本对您来说很重要,最好将 Firestore 与 Redux(我这样做)之类的东西结合起来,以维护本地文档“集”以减少往返调用,并让 Listeners 保持还原当前。

以上是关于Google Firestore 是缓存文档和集合还是总是请求新的?的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 google Firestore 中跨集合查询 [重复]

Google Pub/Sub 更新 Firestore 子集合

Firestore 获取根集合的所有文档和子集合

Firestore:如何在集合中获取随机文档

从嵌套在 Firestore 文档中的集合中获取数据的最佳方法是啥?

再次删除带有文档和集合的集合(firestore react native)