【问题标题】:Firebase child() vs. Angularfire $firebaseObjectFirebase child() 与 Angularfire $firebaseObject
【发布时间】:2015-08-31 07:40:19
【问题描述】:

我试图了解 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 实际上一次加载所有数据,并在您立即调用 $firebaseObject() 时使其可用。 正确吗?

至于使用child(),根据文档,我没有看到任何load() 事件要捕获。也许我错过了。 但它会将所有数据从服务器加载到客户端吗?

如果我有 500MB 的图像,我绝对不希望这种一次性加载的情况发生。

【问题讨论】:

  • Ref.child() 只是创建对子位置的引用。不加载任何东西。我怀疑角度包装器也是如此。
  • 我很确定$firebaseObject() 会立即加载数据(请参阅github.com/firebase/angularfire/blob/master/src/…)。但是您可以通过打开 Chrome 控制台的“网络”选项卡并检查 Web 套接字流量来轻松检查这一点。
  • 从路径名为images的情况来看,很可能是一个集合。因此,您应该使用$firebaseArray() 而不是$firebaseObject()

标签: javascript angularjs firebase angularfire


【解决方案1】:

当您在 ref 上调用 .on 时,firebase 会检索数据

众所周知,所有数据都是一次性检索的(无论您调用 .on 'value' 还是 .on 'child_added'),因此您最好使用 orderByFirst / Last 或使用 firebase util

当您在实例的构造函数中实例化一个 firebaseObject / 数组时,angular fire 会调用“value”/“child_added”,所以是的,数据几乎是立即检索到的(但延迟因此 $加载()函数)。

查看Object manager的源代码和$firebaseObject的构造函数,很清楚

【讨论】:

  • 看来 Angularfire 缺少很多功能(缺少 orderByFirst )并且最终导致性能问题。
  • angularfire 只是根据您提供的 ref 将您的数据与 firebase 同步,您可以在 ref 上使用 orderBy 某些东西或条件,然后从中构建一个 angularfire 实例。您可能想在他们的网站上查看一些 firebase util 实时示例
  • @HP:AngularFire 不是方法名称前带有 $ 的 Firebase SDK。它是一个绑定库,可帮助将本地 Angular 视图数据同步到 Firebase。阅读该指南将极大地帮助您正确使用此工具并节省能源和时间发明轮子。 firebase.com/docs/web/libraries/angular/guide.html
  • 所以从某种意义上说,人们应该像往常一样使用 Firebase SDK,并且只有在您需要在该确切位置进行 3 路绑定时才使用 Angularfire。因为我的误解是 Angularfire 拥有所需的一切。但看起来它不是一个完整的 100% 端口。
  • 我目前正在尝试在 angularfire 之上构建一个模型层,你可以看看它github.com/itkin/angularfire-resource ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 2014-12-23
  • 2016-06-27
  • 2016-10-30
  • 2016-11-28
  • 2017-09-04
  • 1970-01-01
相关资源
最近更新 更多