【问题标题】:Firebase Realtime Database: optimizing for local usageFirebase 实时数据库:针对本地使用进行优化
【发布时间】:2017-08-03 20:50:07
【问题描述】:

在我的用例中,数据仅由客户端写入,而不是由服务器写入。

但我想在服务器上使用 Cloud Functions,只要在客户端上进行更改。

如果数据已经本地存储,我想避免从服务器重新下载数据。

我发现是否可以启用磁盘持久性: FirebaseDatabase.getInstance().setPersistenceEnabled(true);

谁能解释这是否真的阻止重新下载数据,以防数据已经在本地存储,或者数据会定期重新下载?

一般来说,重新下载数据的标准是什么?客户端和服务器数据之间是否存在某种哈希码检查以查明数据是否已更改?

【问题讨论】:

标签: android firebase firebase-realtime-database


【解决方案1】:

调用 setPersistenceEnabled(true) 启用 Firebase 的磁盘缓存。它的主要目的是确保您的应用程序在没有网络连接时继续工作。此外,它可能会减少数据传输,但这取决于很多变量。

有关磁盘持久性的含义、它如何与 Firebase 的内存中数据缓存交互等更多信息,请参阅:

【讨论】:

  • 谢谢弗兰克。所以,如果我同时使用FirebaseDatabase.getInstance().setPersistenceEnabled(true);ref.addValueEventListener(listener); 并且服务器从不更改数据,我可以期望不会从服务器重新下载数据吗?
  • 不幸的是,事情没那么简单。将与服务器进行通信以检查数据是否是最新的。这是“只是一堆哈希”。但它可以根据您存储的数据累加。不幸的是,这不是一个简单的答案。
  • 如果使用ref.addListenerForSingleValueEvent(listener); 监听器,您所说的流量是否会被完全排除?
  • 不,不会。请参阅我上面分享的第三个链接中的“使用 addListenerForSingleValueEvent 时会发生什么”。
  • 根据那里写的,不会从服务器获取数据:The Firebase client will (like in the previous situation) immediately invoke onDataChange() for the value from the local disk cache. It will not invoke the onDataChange() any more times, even if the value on the server turns out to be different.
猜你喜欢
  • 2011-01-07
  • 2023-02-14
  • 2020-10-18
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多