Firestore中onSnapshot查询已覆盖文档新增单文档监听是否产生额外读取
Firestore 重叠快照监听器的读取规则说明
- 新增单文档监听器不会触发无意义的额外服务端读取、不会产生额外计费
当你注册针对example/123abc的单文档onSnapshot监听时,官方客户端SDK会先做两层检查:首先检查当前是否有其他活跃监听器已经在订阅该路径的文档,其次检查本地缓存中是否已经持有该文档与服务端一致的最新版本。你当前场景下集合查询的监听器已经处于活跃状态,且123abc已经在查询结果集中,本地已经存储了该文档的最新快照,因此新监听器的首次回调会直接使用本地缓存数据,不会向服务端发起新的拉取请求。 - 客户端SDK会自动复用监听链路,不会重复建立服务端监听连接
Firestore客户端对同路径、同一致性级别的实时监听做了内置去重:不管你是通过集合查询间接监听文档,还是直接对单文档注册监听,SDK只会和服务端维护一份该文档的变更订阅通道,不会因为注册了多个监听器就重复发起网络连接。 - 复用逻辑完全覆盖后续变更推送场景,无重复计费
当123abc后续发生内容变更时,只要它仍然匹配原有集合查询的过滤条件,服务端只会向客户端推送一次该文档的变更快照,SDK内部会把这份变更同步分发给所有关联的监听器(包括原集合查询监听器、你新增的单文档监听器),这个过程只会产生一次文档变更的读取计费,不会重复扣费。
特殊场景说明:如果后续
123abc的内容变更导致它不再符合原集合查询的过滤条件,原集合监听器会收到文档移除的回调,此时SDK会自动将该文档的监听来源切换到你单独注册的单文档监听器上,整个切换过程平滑无额外请求,后续该文档的变更仍然只会推送一次,不会产生重复读取。
内容的提问来源于stack exchange,提问作者Nathan
相关产品推荐
相关产品推荐

