Firebase - 缓存可以提高性能吗?

时间:2012-08-16 16:14:31

标签: performance firebase

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

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

从某种意义上说,我正在“缓存”数组中的firebase数据。从某种意义上说,这并不理想 - 缓存数据不像直接查询Firebase那样是最新的。另一方面,我只打电话给Firebase一次。

这是否具有性能意义?从Firebase读取数据的时间是否与从数组中读取数据的时间相同?

1 个答案:

答案 0 :(得分:21)

通常,不需要缓存数据以限制Firebase的使用。 Firebase在客户端上维护自己的“活动”数据缓存。 “活动”被定义为对其进行“开启”呼叫的数据。因此,对于任何活动数据,任何额外的“开启”或“一次”呼叫都不需要网络流量,因为数据已经加载。

我不完全确定“查询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能够通过仅在事情发生变化时通过线路发送增量来保持数据最新,而不是每次需要时重新加载所有数据。