在标准聊天应用中,我的客户首先寻找其订阅的聊天室
然后收听所有聊天室数据。在伪:
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中可以正常使用
答案 0 :(得分:0)
我在您的代码段中看到一个错字
db.collection('chatrooms').where('members.\(mySelf)',1)
.addSnapshotListner(chatRooms) {
chatRooms.forEach { room in
room.collection('messages').addSnapshotListener() { ... }
}
}
它是写成Listner而不是Listener(第二行)