addSnapshotListener响应缓慢+CPU使用率高



在一个标准的聊天应用程序中,我的客户端首先查找其订阅的聊天室

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

db.collection('chatrooms').where('members.(mySelf)',1)
.addSnapshotListner(chatRooms) {
chatRooms.forEach { room in 
room.collection('messages').addSnapshotListener() { ... }
}
}

这会导致在大约10个聊天室中出现大约10秒的100%CPU峰值。我已经验证了,即使在内部快照侦听器回调中根本不执行任何代码,这种情况仍然会发生——即订阅本身资源繁重。

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

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

我正在努力实现一种行为,即用户可以打开应用程序,进入第一个聊天室,并尽快查看消息。

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

我使用的是0.9.2 Swift SDK。

更新:这种情况仅在iOS 10中发生,在iOS 11中运行良好

我在您的代码段中看到一个拼写错误

db.collection('chatrooms').where('members.(mySelf)',1)
.addSnapshotListner(chatRooms) {
chatRooms.forEach { room in 
room.collection('messages').addSnapshotListener() { ... }
}
}

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

最新更新