【发布时间】:2021-07-02 20:26:59
【问题描述】:
根据 Firestore 的最佳实践文档(如下),应避免快速连续添加和删除快照侦听器。文档指出,“快照侦听器的生命周期应为 30 秒或更长。”但是,由于快照订阅和后续取消订阅由用户的操作(例如导航到和离开特定页面)控制,因此可能无法始终保持连接打开超过 30 秒。
例如,我的应用有一个帐户详细信息页面。该页面有一个订阅主要详细信息(即帐户名称、主要地址、主要联系人等)的侦听器。该页面还有几个表(例如 Locations、Inventory、Purchase Orders 等),每个表都有自己的侦听器。
话虽如此,如果我的用户在多个帐户详细信息页面之间快速导航会不会有问题(因为每个页面都将打开和关闭自己的一组 3-5 个侦听器)?如果有问题,这会给我的应用程序带来什么类型的问题?例如,Firestore 会暂时放慢速度吗?或者数据一致性是否存在更大的问题(即,在等待新快照启动时,快照会暂时显示旧快照数据)?
这是 Firestore 的最佳实践文档中所述的内容:
避免频繁搅动侦听器,尤其是当您的数据库承受大量写入负载时。
理想情况下,您的应用程序应在打开与 Cloud Firestore 的连接后立即设置所有必需的快照侦听器。设置初始快照侦听器后,应避免在同一连接中快速添加或删除快照侦听器。
为确保数据一致性,Cloud Firestore 需要从源数据中启动每个新的快照侦听器,然后赶上新的变化。根据您数据库的写入速率,这可能是一项昂贵的操作。
如果您经常向引用添加或删除快照侦听器,您的快照侦听器可能会遇到延迟增加。通常,对于相同数量的数据,持续连接的侦听器比在该位置附加和分离侦听器的性能更好。为获得最佳性能,快照侦听器的生命周期应为 30 秒或更长。如果您在应用中遇到侦听器性能问题,请尝试跟踪应用的侦听和取消侦听,以确定它们是否发生得太频繁。
https://firebase.google.com/docs/firestore/best-practices#realtime_updates
【问题讨论】:
标签: firebase google-cloud-firestore