使用复杂子句创建onSnapshot或使用简单子句在Snapshots上创建3有任何成本或性能差异。此外,posts集合有一条规则,如果登录的用户有权阅读这些帖子,则会检查posts_permission集。这是一个移动项目,所以我关心性能和成本,因为帖子可以不断更新。
复杂子句:
const query = db.collection('posts')
.where(firebase.firestore.FieldPath.documentId(), 'in', ['id1','id2', 'id3']);
query.onSnapshot(snap => {console.log(snap)});
简单子句:
const query1 = db.collection("posts").doc("id1")
const query2 = db.collection("posts").doc("id2")
const query3 = db.collection("posts").doc("id3")
query1.onSnapshot(snap => {console.log(snap)});
query2.onSnapshot(snap => {console.log(snap)});
query3.onSnapshot(snap => {console.log(snap)});
就成本而言,读取X个文档的成本总是X个文档读取的成本。需要多少查询并不重要。您还将为通过安全规则评估读取的每个文档付费。如果你只是按照文档中的信息来计算成本,那真的很容易。没有隐藏的成本。
就性能而言,多个查询和单个查询之间确实没有太大区别。除非您要处理大量的文档,否则根据文档的大小和数量以及网络连接的质量,您可能会看到类似的性能。所有读取的文档都是通过单个连接进行流水线传输的,因此从多个侦听器接收文档与从一个侦听器接受文档没有实质性区别。如果您有顾虑,您应该自己对此进行基准测试。