【问题标题】:Firebase retrieving of data slowFirebase 检索数据缓慢
【发布时间】:2017-05-20 04:32:17
【问题描述】:

我有一个加载申请人列表的 firebase 应用。问题是当它已经加载了 500 多个申请人数据时它变得很慢。之前它仍然很快,因为它加载了少量数据(例如 100 个申请人)。我使用此代码:

userRef.on("value", function(snapshot) {
        snapshot.forEach(function(childSnapshot) {
            var applicants = [];
            // other code here
        });
        deferred.resolve(applicants);
    }, function (error) {
        deferred.reject(error);
    });

我正在考虑限制正在检索的数据数量并对数据进行分页,但不一样吗?因为我需要知道数据的数量才能对其进行分页,因此检索是相同的。

【问题讨论】:

  • 可能只获取一次键并将其存储在本地存储中,然后通过键(索引)获取值
  • 保持应用响应的关键是不要加载超过用户可以看到的数据。您似乎不太可能在移动屏幕上显示 500 名申请人的列表,因此我建议将其减少到他们合理需要查看的实际人数。除此之外,总是很难在没有看到实际问题的情况下帮助提高性能。所以如果你想要更多的反馈,你可以设置一个 jsbin 来重现你看到的缓慢加载吗?

标签: javascript firebase firebase-realtime-database


【解决方案1】:

我可能错了,但.on("value") 从请求所有数据开始,直到完成。因此,如果您有大量数据,则需要花费大量时间。另一种方法是.on("child_added") 函数,它在将每个子元素添加到数据库时返回它。但是当您第一次开始调用它时,也会为每个元素调用它。所以对于非阻塞/快速启动来说“完美”。

查看文档: https://firebase.google.com/docs/database/admin/retrieve-data#child-added

// Retrieve new posts as they are added to our database
ref.on("child_added", function(snapshot, prevChildKey) {
  var newPost = snapshot.val();
  console.log("Author: " + newPost.author);
  console.log("Title: " + newPost.title);
  console.log("Previous Post ID: " + prevChildKey);
});

【讨论】:

  • 这是我开始使用 Firebase 时最初的想法。但在网络层面,value 事件和child_added 事件检索数据的方式没有区别。两者都在开始触发事件之前检索侦听器的所有初始数据。
  • 谢谢你,很高兴知道。那我想我帮不了你了。对不起
猜你喜欢
  • 2016-03-16
  • 2020-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多