我正在尝试了解当Firebase实际将数据加载到客户端与执行"延迟加载" (仅在需要时下载数据)。原因是我在Firebase中保存图像(base64)(请不要问为什么它只有几百MB)。所以有两种选择:
// With typical Firebase
var imagesRef = Ref.child('images');
// With Angularfire
var imagesObj = $firebaseObject(Ref.child('images'));
Ref
只是对我的Firebase网址的引用。
我知道使用Angularfire,$loaded()
让我觉得Angularfire实际上会加载AT ONCE的所有数据,并在你立即调用$firebaseObject()
时使其可用。 这是正确的吗?
至于使用child()
,根据文档,我没有看到任何要捕获的load()
事件。也许我错过了它。 但它是否将所有数据从服务器加载到客户端?
如果我喜欢500MB的图像,我绝对不希望这种负载一次性发生。
答案 0 :(得分:1)
firebase在ref
上调用.on时检索数据众所周知,所有数据都是一个整体检索的(你称之为.on'value'或.on'child_added'),所以你最好使用orderByFirst / Last或使用{{3}对结果进行分页。 }
当您实例化firebaseObject /数组时,在实例的构造函数内调用'value'/'child_added'时会发生什么角火,所以是的,数据几乎立即被检索(但是因此推迟了$ loaded()函数)。
查看firebase util的源代码和$ firebaseObject的构造函数,例如,它非常清楚