在 Firebase 中启用持久性时实际发生了什么?
What actually happens when persistence is enabled in Firebase?
在 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 不会,这可能不是您想要的想要(你永远不会看到最新的服务器数据)。
希望对您有所帮助!
在 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 不会,这可能不是您想要的想要(你永远不会看到最新的服务器数据)。
希望对您有所帮助!