Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firestore onSnapshot:一个复杂查询或多个简单查询_Javascript_Firebase_Mobile_Google Cloud Firestore_Firebase Security - Fatal编程技术网

Javascript Firestore onSnapshot:一个复杂查询或多个简单查询

Javascript Firestore onSnapshot:一个复杂查询或多个简单查询,javascript,firebase,mobile,google-cloud-firestore,firebase-security,Javascript,Firebase,Mobile,Google Cloud Firestore,Firebase Security,使用复杂子句创建一个onSnapshot或使用一个简单子句创建一个3,两者在成本或性能上都有差异。此外,posts集合有一条规则,如果登录用户有权阅读帖子,则该规则将签入posts\u权限集合。这是一个移动项目,所以我关心性能和成本,因为帖子可以不断更新 复杂子句: const query = db.collection('posts') .where(firebase.firestore.FieldPath.documentId(), 'in', ['id1','id2

使用复杂子句创建一个onSnapshot或使用一个简单子句创建一个3,两者在成本或性能上都有差异。此外,posts集合有一条规则,如果登录用户有权阅读帖子,则该规则将签入posts\u权限集合。这是一个移动项目,所以我关心性能和成本,因为帖子可以不断更新

复杂子句:

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)});
简单子句:

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个文档。不管需要多少查询。您还将为安全规则评估读取的每个文档付费。如果您只需按照表中的信息进行操作,就可以很容易地计算成本。没有隐藏的成本


就性能而言,多个查询和单个查询之间实际上没有太大区别。除非您正在处理大量文档,否则您可能会看到基于文档大小和数量以及网络连接质量的可比性能。所有读取的文档都通过单个连接进行管道传输,因此从多个侦听器接收文档与从一个侦听器接收文档没有实质性区别。如果你有顾虑,你应该自己确定一下。

你还需要考虑它们是三个不同的请求,其中一个或两个可能会测试网络延迟。一般来说,由于文档是索引的,所以最好一次查询所有文档