【问题标题】:Load data slow while fetching from firebase + iOS从firebase + iOS获取时加载数据缓慢
【发布时间】:2018-12-12 23:07:30
【问题描述】:

我正在使用 firebase 真实数据库准备 iOS 原生应用程序。

我有大约 10 万条数据。我需要显示最近的 50 个帖子,并在加载更多接下来的 50 个帖子后,所以我实现了 50 条记录的 分页 仍然需要很长时间(大约 20-30 秒)。

我还尝试了 indexing 与 firebase 中的规则。

仅供参考:它适用于 1000 条记录。

如何提高性能?

  let post_messagesReference = self.databaseRef.child(FirebaseTablePostMessages)
        var query = post_messagesReference.queryOrdered(byChild: kCreated)
        var lastKey = String()
        var createdVal = Int()
        if let last = self.endKeyCommunity.first {
            lastKey = last.id
            createdVal = Int(last.created)
        }

        //get first 50 records
        if self.endKeyCommunity.count == 0{
            query = query.queryLimited(toLast:50)
            self.showLoaderView()
        } else { //get next 50 records
            query = query.queryEnding(atValue: createdVal).queryLimited(toLast: 50)
        }
        query.observeSingleEvent(of: .value, with: { (snapshot) in
            guard let children = snapshot.children.allObjects.first as? DataSnapshot else { return }
            if snapshot.childrenCount > 0 {
                for child in snapshot.children.allObjects as! [DataSnapshot]{
                    guard case let communityChatDictionary as NSDictionary = child.value else { return }
                    if lastKey != child.key{
                    }
                guard case let communityChatDictionary as NSDictionary = children.value else { return }

            }

        }) { (error) in
  } 

【问题讨论】:

  • 请避免使用“lac”等印度词。
  • 前50个节点的加载需要多长时间?随后的 50 个音符需要多长时间?每个节点有多大?您正在测试的带宽是多少?
  • 每个节点有多大? : 12 keys 你测试的带宽是多少?:5 MBPS 前 50 个节点的加载需要多长时间?:前 50 个节点加载 2-3 秒,但接下来的 50 个节点大约需要 15-20 秒。

标签: ios swift performance firebase firebase-realtime-database


【解决方案1】:

尝试更改您的 Firebase 规则,以便您设置:

".read": "query.orderByKey &&
            query.limitToFirst <= 100"

删除此代码var query = post_messagesReference.queryOrdered(byChild: kCreated)。只需像这样调用您的分页请求:

post_messagesReference.limitToFirst(50)
                  .orderByKey(kCreated)

【讨论】:

  • 现在我可以更快地获取前 50 条记录。如何获取接下来的 50 条记录?
  • 您可以在末尾添加 .startAt() 并使用您刚刚获取的第一页中最后创建的对象。查看 Firebase 文档中的 .startAt() 和 .endAt() :firebase.google.com/docs/firestore/query-data/query-cursors
猜你喜欢
  • 2020-09-30
  • 2018-08-06
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-23
  • 2022-01-15
相关资源
最近更新 更多