【发布时间】:2021-03-18 10:42:50
【问题描述】:
我有多个使用addSnapshotListener 的听众:
db.collection("messages")
.addSnapshotListener { querySnapshot, error in
// ...
}
我了解第一个查询快照包含所有匹配的文档。并且它们是从服务器中检索出来的。
问题:当我再次拨打.addSnapshotListener 时会发生什么?它是否仍然为初始批次调用服务器,从而产生再次读取多个文档的成本?
从逻辑上讲,我认为不需要调用服务器,因为它会主动监控更改,因此缓存的文档不应该过时,但不清楚 Firebase SDK 实际做了什么,而如果我调用成本可能会很高多次(例如,在每个导航的 SwiftUI 中)。
【问题讨论】:
-
您可以通过查看source 来了解SDK 的作用。
-
@DougStevenson,是的,我想,对 Obj-C 和 C++ 有相当了解的人可能能够弄清楚这一点:) 你碰巧知道吗?或者知道如何测试?
-
如果它已经在监听,为什么还要再调用它?我真的不明白这个问题。
-
@bsod,我在想这种行为会告知如何设计系统。例如,当用户在检索消息的屏幕之间导航时,我应该在每次屏幕加载时调用“addSnapshotListener”,还是需要设计一个不断监听的单例以避免首次获取“惩罚”
-
我现在明白了——当您在整个应用程序中添加两次相同的侦听器时。如果 Firebase 为同一个侦听器建立单独的连接,我会感到惊讶;如果他们这样做了,那几乎肯定会在未来的更新中改变。当我说便宜时,我的意思是在工程方面,而不是在成本方面——你的应用程序不会被一堆并发的听众所困。当我说多个听众时,我假设他们的意思是分开查询,但 IDK。但是,如果您真的“经常”在整个应用程序中添加相同的侦听器,那么制作一个静态侦听器的决定几乎是为您做出的。
标签: swift google-cloud-firestore