15

我正在使用 Firebase 构建一个 Web 应用程序,它采用相同的数据并以两种不同的方式呈现它——在列表中和作为谷歌地图上的标记。

现在,在每个视图(地图或列表)中,我都有从 firebase 查询数据、将其合并并显示的代码。相反,我正在考虑这个计划:在启动时,查询数据,合并它,然后将其全部保存到一个数组中,然后从一个视图传递到另一个视图。

从某种意义上说,我正在将 firebase 数据“缓存”在一个数组中。这在某种意义上并不理想 - 缓存的数据不如直接查询 Firebase 那样最新。另一方面,我只调用 Firebase 一次。

这对性能有意义吗?从 Firebase 读取数据与从数组读取数据所花费的时间是否相同?

4

1 回答 1

22

通常,不需要缓存数据来限制 Firebase 的使用。Firebase 在客户端维护自己的“活动”数据缓存。“活动”被定义为“开启”呼叫未完成的数据。因此,对于任何活动数据,任何额外的“on”或“once”调用都不需要网络流量,因为数据已经加载。

我不完全确定“查询 firebase”是什么意思。Firebase 没有传统意义上的查询。它只是具有附加回调的方法。您是否使用“once()”函数定期从 Firebase 获取数据?如果是这样,这可能是非常低效的。一次是一种方便的方法,通常只应用于极不经常访问的数据或由于某种原因开发人员不想实时更新的数据。如果在 once() 完成时没有未完成的活动“on”调用,Firebase 将刷新该数据的缓存,并且对 once() 的任何后续调用都需要往返服务器。

如果您想要一种以有效方式同步访问最新版本数据的本地副本的方法,我推荐这种方法:

var savedSnapshot = null;
dataRef.on("value", function(snapshot) {
  savedSnapshot = snapshot;
});

//and then when you need to read the data
var theData = savedSnapshot.val()

通过维护一个 on() 调用,Firebase 能够通过仅在事情发生变化时通过线路发送增量来保持数据最新,而不是在每次需要时重新加载所有数据。

于 2012-08-16T18:01:23.490 回答