缓慢的addSnapshotListener响应+高CPU使用率

时间:2017-11-16 07:17:51

标签: firebase google-cloud-firestore

在标准聊天应用中,我的客户首先寻找其订阅的聊天室

然后收听所有聊天室数据。在伪:

db.collection('chatrooms').where('members.\(mySelf)',1)
.addSnapshotListner(chatRooms) {

   chatRooms.forEach { room in 

       room.collection('messages').addSnapshotListener() { ... }

   }

}

这导致100%的CPU峰值大约10秒钟,大约有10个聊天室。我已经证实,即使在内部快照侦听器回调中根本不执行任何代码,这仍然会发生 - 即订阅本身就是资源密集型。

重要的是,当我关闭离线持久性时,addSnapshotListener行为正常并且不会占用大量CPU资源。

我不确定我是否以错误的方式构建了这个或者这可能是一个错误?

我正试图达到用户可以打开应用程序的行为,进入第一个聊天室之一并尽快查看消息。

我试过的另一种方法是每当用户点击时都会收听每个聊天室,但即使初始数据快照来自本地缓存,加载所有数据仍然需要大约0.5-1.0秒(消息子收集+成员用户可以看到任何数据之前的子集合。

我正在使用0.9.2 Swift SDK。

更新:这仅在iOS 10中发生,在iOS 11中可以正常使用

1 个答案:

答案 0 :(得分:0)

我在您的代码段中看到一个错字

db.collection('chatrooms').where('members.\(mySelf)',1)
.addSnapshotListner(chatRooms) {

   chatRooms.forEach { room in 

       room.collection('messages').addSnapshotListener() { ... }

   }

}

它是写成Listner而不是Listener(第二行)