firebase - 将 StreamBuilder 用于相同的流及其对从 firestore 读取的次数的影响
问题描述
我有以下 getter 函数来从 firestore 获取用户配置文件数据。
Stream<UserProfile> get userProfile {
FirebaseAuth _auth = FirebaseAuth.instance;
try {
return _auth.currentUser == null
? null
: _firestore
.collection('users')
.doc(_auth.currentUser.uid)
.snapshots()
.map(
(DocumentSnapshot documentSnapshot) => UserProfile(
uid: documentSnapshot.data()['uid'],
email: documentSnapshot.data()['email'],
),
);
} on Exception catch (e) {
print(e);
return null;
}
}
据我了解,这个 getter 稍后将与 StreamBuilder 一起使用。调用这个getter会增加我在firebase firestore中的读取次数1,并且读取次数只会在这个特定的用户数据发生变化时增加(更新时)。
但是,如果我在 2 个不同的颤振文件/小部件中调用这个 getter,读取次数会如何变化?由于我在 2 个不同的地方调用它,这是否意味着对于从每个唯一文件进行的每次调用,读取次数都会增加 1?或者,因为我使用相同的吸气剂,即使我在不同的地方调用它,它的整体成本是否为 1?
解决方案
每次调用此代码时:
_firestore
.collection('users')
.doc(_auth.currentUser.uid)
.snapshots()
这将花费至少 1 次读取,以及每次文档更改时的更多读取。无论代码是否在 getter 函数中,或者您选择以何种方式进行此查询,它的成本都是一样的。
如果您希望所有代码共享一个流,那么您应该只执行一次查询、存储流并独立提供该流。
推荐阅读
- java - Java LinkedList addLast() 方法实现错误
- regex - 正则表达式不提取组
- excel - 如何获取整个网页的内容
- typescript - 具有泛型的 Apollo 服务器快速返回类型
- python-3.x - x 秒后超时 discord.py 重写
- python - exe 文件可以修改包含的文本文件吗?
- node.js - 巢穴 | 配置模块 | 在 `validate` 函数中使用(或注入)服务
- python - Discord 机器人扩展运行良好,但不起作用
- python - jupyter notebook 中由 shift+tab 打开的帮助选项卡无法正确呈现方法/函数的文档字符串
- user-interface - 如何结合谷歌登录和普通登录?