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 子集合