我有一个集合,其中包含大约1000个文档。我在此收藏夹上设置了一个侦听器,以查找更改。该侦听器与此非常相似: https://firebase.google.com/docs/firestore/query-data/listen#listen_to_multiple_documents_in_a_collection
db.collection("cities").where("state", "==", "CA")
.onSnapshot(function(querySnapshot) {
var cities = [];
querySnapshot.forEach(function(doc) {
cities.push(doc.data().name);
});
console.log("Current cities in CA: ", cities.join(", "));
});
但是,此代码示例也可以监听快照之间的更改:https://firebase.google.com/docs/firestore/query-data/listen#view_changes_between_snapshots
db.collection("cities").where("state", "==", "CA")
.onSnapshot(function(snapshot) {
snapshot.docChanges().forEach(function(change) {
if (change.type === "added") {
console.log("New city: ", change.doc.data());
}
if (change.type === "modified") {
console.log("Modified city: ", change.doc.data());
}
if (change.type === "removed") {
console.log("Removed city: ", change.doc.data());
}
});
});
我的问题是,关于通过有线传输的数据,这两种实现之间真的有区别吗?在我的示例中,集合中有1000个文档。在获得最初的1000个文档后,如果一个文档发生更改,那么对于每种实现,通过网络发送了多少数据? 1份文件?还是1000?
通常,我会检查“ Chrome开发者工具”的“网络”标签以查看有效负载。如果有人知道如何找到此流数据的等效信息,那也很好。
答案 0 :(得分:1)
Cloud Firestore有效地通过网络发送更改,本地客户端构建包含世界更新状态的快照。在您的示例中,更改单个文档将导致通过导线发送单个文档,并且将为您收取读取单个文档的费用(显然是每个连接的客户端)。