- 我正在使用 firebase JS SDK,离线持久化已启用。这会自动将我检索到的文档缓存在 JS SDK 中。
- 我执行这个查询:
// once
firebase.firestore().doc('path/to/doc').get()
// twice
firebase.firestore().doc('path/to/doc').get()
我的问题是:
- Firebase 会向我收取两次阅读此案例的费用吗启用离线持久化。因为我相信第二次读取将来自离线缓存而不进行网络调用?
- Firebase 会向我收费吗once or twice when 离线持久化已禁用?
我的用例
用户打开一个网络应用程序,其中包含来自客户端的“任务”。
每个任务都有一个client
带有文档参考的字段。
- 检索所有任务(例如 500 次读取)
- 检索每个任务的每个客户文档(即使某些客户相同,也会读取另外 500 个文档)
So 如果只有 20 个客户,当用户打开应用程序时,我宁愿只有 520 次读取,而不是 1000 次读取。
是否最好重新设计我的数据结构,将相关客户端信息保存在任务本身而不是引用上,或者 Firebase JS SDK 是否足够智能,不会重复检索刚刚检索到的相同文档。
PS:我在这里发现了类似的问题:
Firestore 是否对每次检索的文档的 Cloud Function Get 读取收费?
但它只是没有我正在寻找的确切信息。
firebase 从 firestore js sdk 缓存检索文档是否收费?
不,没有。如果从本地缓存完成读取,则不会按服务器端读取收费。
但是你的代码有两个get
calls:
// once
firebase.firestore().doc('path/to/doc').get()
// twice
firebase.firestore().doc('path/to/doc').get()
在这种情况下,Firestore 客户端无法知道文档在这两次调用之间是否发生了更改。所以它必须调用服务器来确定文档是否被更改,这是(或至少may be)收费阅读。
如果您需要了解应用程序中执行时间接近的多个位置中的文档的当前状态,您应该保留一个onSnapshot
该文档的侦听器。这确保了本地缓存始终以最小的成本保持最新。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)