因此,我的应用程序有一半相当程度上依赖于Firestore。
有时候,加载文档需要很长时间,比如5000ms
或者更长时间。如果是图像或者其他东西,我可能会理解,但是主要是字符串或者整型...
有什么想法我可以改善这一点吗?
谢谢
**编辑:**数据库集合(“用户验证/${FirebaseAuth.getInstance().uid!!}/工具包列表”).get().addOnSuccessListener {快照-〉
for (document in snapshot.documents) {
val data = document
val kitName = data.id
firstKitList.add(kitName)
}
mainListViewAdapter.notifyDataSetChanged()
}
编辑2
所以,我修改了它,但是在snapshot
上有一个未解决的错误。
db.collection("usersAuth/${FirebaseAuth.getInstance().uid!!}/KitLists").addSnapshotListener(object : EventListener<QuerySnapshot> {
override fun onEvent(@Nullable value: QuerySnapshot, @Nullable e: FirebaseFirestoreException?) {
if (e != null) {
Log.w("TAG", "Listen failed.", e)
return
}
for (document in snapshot.documents) {
val data = document
val kitName = data.id
firstKitList.add(kitName)
}
mainListViewAdapter.notifyDataSetChanged()
}
})
这是错误x1c 0d1x
1条答案
按热度按时间8ftvxx2r1#
如果您正在使用
get()
调用,您需要知道您正在尝试通过Internet读取数据。您不能将此操作与阅读SQLite数据库的操作进行比较。它存储在本地磁盘上。从Firebase服务器获取数据的速度取决于您的Internet连接速度和您试图获取的数据量。因此,等待5000ms
的原因很可能是其中之一,或者两者兼而有之。如果原因是数据量,请尝试优化您的查询或尝试将数据分成小部分。如果我们说的是第一次尝试读取文档,它可能会比随后的几次慢,因为它必须启动互联网连接。我知道Firebase团队正在尝试提高性能,但当通过网络检索数据时,您不能期望
0ms
。你可以做的一件事是启用
offline persistence
,它将为之前读取的数据创建一个本地缓存。但是get()
请求将首先检查Firebase服务器。如果你使用addSnapshotListener()
,你将能够立即该高速缓存中读取数据,而无需检查网络。如果要收听单个文档,请使用以下代码:
如果要收听集合中的多个文档,请使用以下代码: