【问题标题】:Firebase single value listener calls server even when local cache is available and has not changed即使本地缓存可用且未更改,Firebase 单值侦听器也会调用服务器
【发布时间】:2016-10-19 17:46:15
【问题描述】:

我的 Firebase 数据库已设置 PersistenceEnabled=true。离线时,所有侦听器都可以正常工作并从本地缓存中获取数据。

但是,在线时,每次我在同一节点上使用 addListenerForSingleValueEvent 时,Firebase 都会进行网络调用,即使我有本地缓存​​并且服务器上没有任何更改。

我在将侦听器附加到的节点上有两个项目,在将日志级别设置为调试后,我看到以下报告。每次我在线使用侦听器时,都会重复此网络活动,即使在亚秒级延迟内也是如此。我的理解是,如果 Firebase 有本地数据,则不会进行服务器调用。任何同步检查都可能在后台进行,并具有高效的网络使用率。

conn_18 - 收到数据消息:{r=20, b={s=ok, d={}}}
conn_18 - 收到数据消息:{r=21, b={s=ok, d=}}

我正在努力减少我的应用的网络使用量,任何停止/减少 Firebase 网络活动的建议都会非常有帮助。

【问题讨论】:

    标签: android firebase firebase-realtime-database network-traffic


    【解决方案1】:

    我自己一直在研究这个。

    据我所知,您遇到的第二个电话只是网络说“嘿,没有更新”,而且您无需为任何阅读付费。

    就减少网络活动而言,我认为这就是它的工作方式,以及您希望它如何工作(它是侦听器的实际收听部分)。如果您不想这样,请使用 getDocument 调用,而不是侦听器。

    这是基于以下几点:

    • 当您查看 snapshot.metadata.isFromCache (iOS SDK) 进行查询时,调用会出现两次。首先来自缓存,然后来自服务器。但是,如果您在 snapshot.documentChanges 下打印一条语句,则只会打印缓存的调用。
    • 我做了一个实验,在 iOS 中重新加载视图大约 20 次。我还对我的数据进行了一些小改动。然后我等了 5 到 10 分钟,查看了使用情况:https://console.cloud.google.com/firestore/usage。我的总阅读次数增加了 3,这意味着我只需为更新付费。多次重新加载视图不收费。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2017-02-22
      • 1970-01-01
      相关资源
      最近更新 更多