在 iOS 中打开 Firebase 的持久性时,我的观察者实际上发生了什么,以及他们在技术层面上的行为如何?
我很清楚它应该如何基于这个 https://firebase.google.com/docs/database/ios/offline-capabilities 在高层次上工作- Firebase 本质上保留了您可以在离线时访问的数据的缓存副本。
我不明白的是我的观察员应该开火多少次以及提供什么信息。
- firebase 是否总是首先使用任何缓存数据触发我的观察者一次(如果没有任何数据则为 null),然后是服务器数据。
- 或者它是否只发送缓存数据(如果存在)和服务器数据。
- 在持久模式下,observerSingleValue 和连续观察者的行为有什么区别吗?
在启用持久化的应用中,我注意到:
- Firebase 只发送服务器数据
- Firebase 发送缓存数据(如果存在)然后发送服务器数据。
- Firebase 发送缓存数据,如果不存在则返回 null,然后是服务器数据。
最好把它弄清楚,这样我们就知道哪个应该是正常行为了:)
最佳答案
其实很简单。当您附加观察者时(无论是使用 observeEventType
还是 observeSingleEventOfType
),Firebase 将:
- 使用任何完整 缓存数据立即引发事件。
- 从服务器请求更新的数据,当数据到达时,如果数据与缓存的不同,则引发新事件。
虽然有一些微妙之处:
- 我们只会在缓存数据完整时引发事件。这表示:
- 如果我们没有缓存数据(您之前没有观察到这个位置),我们将不会引发具有 null 或类似内容的事件。在我们从服务器获取数据之前,您不会收到任何事件。
- 如果您有此位置的部分 数据(例如,您之前观察过/foo/bar 但现在正在观察/foo),您将获得
ChildAdded
事件完整的子项(例如/foo/bar),但在我们从服务器获取您正在观察的位置的完整数据之前,您不会获得Value
事件(例如/foo)。
- 如果您正在使用
observeSingleEventOfType
,则您明确要求只请求一个事件,因此如果您有缓存数据,#1 会发生但#2 不会发生,这可能不是什么你想要的(你永远不会看到最新的服务器数据)。
希望这对您有所帮助!
关于android - 在 Firebase 中启用持久性时实际发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37276499/