我开始使用Firestore。我已阅读关于脱机数据持久性的文档和教程,但我并不清楚Firestore是否再次下载数据(即使内容未被修改)。 例如,如果我有一个查询结果每周更新一次,而且我不需要应用程序再次下载内容,直到做出更改,那么编写代码的效率方面最好的方法是什么? 谢谢!Firestore - 使用缓存直到在线内容更新
5
A
回答
0
你想使用“快照监听器” API来听您的查询: https://firebase.google.com/docs/firestore/query-data/listen#listen_to_multiple_documents_in_a_collection
下面是一些JavaScript为例:
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(", "));
});
您将这个监听器第一次公司的FireStore将访问网络将所有结果下载到您的查询中,并为您提供查询快照,如您所期望的那样。
如果您再次附加同一个侦听器,并且您使用的是脱机持久性,则会立即使用缓存中的结果触发侦听器。这里是你如何可以检测,如果你的结果是从高速缓存或本地:
db.collection("cities").where("state", "==", "CA")
.onSnapshot({ includeQueryMetadataChanges: true }, function(snapshot) {
snapshot.docChanges.forEach(function(change) {
if (change.type === "added") {
console.log("New city: ", change.doc.data());
}
var source = snapshot.metadata.fromCache ? "local cache" : "server";
console.log("Data came from " + source);
});
});
后你会得到高速缓存的结果,公司的FireStore将与服务器检查,看看是否有你的查询结果的任何变化。如果是的话,你会得到另一个快照的变化。
如果您希望收到更改只(如果没有文件改变,但snapshot.metadata.fromCache
变化为例)包括元数据,你可以发出查询时使用QueryListenOptions
: https://firebase.google.com/docs/reference/android/com/google/firebase/firestore/QueryListenOptions
相关问题
- 1. 缓存失效内容更新
- 2. HTML5更新离线缓存
- 3. 缓存内容
- 4. 无法使用alamofire获取新内容(无法刷新缓存内容)
- 5. 使用PHP + MySQL缓存大量内容
- 6. ASP内容缓存
- 7. 缓存数据,直到更改
- 8. 在WordPress中使用Ajax更新内容
- 9. 缓存,避免缓存内容
- 10. 如何通过使用Http缓存控制保存firestore请求?
- 11. 由于缓存原因,内容未更新
- 12. 更新缓存的rx java observables数据(使用嵌套缓存!)
- 13. Android:有没有办法在离线时缓存网页内容?
- 14. 更新内容
- 15. 使用BeginInvoke挂起UI更新直到线程完成?
- 16. 静态内容缓存
- 17. html iframe缓存的内容
- 18. 解码Opera缓存内容
- 19. Smarty缓存(动态内容)
- 20. 缓存静态内容
- 21. 返回内容直接从内存缓存 - Django的/ HTTP服务器
- 22. Firestore对象更新列表
- 23. SQL Server缓冲区缓存内容
- 24. Firestore - 检查正在更新的文档是否存在
- 25. 使用javascript更新div的内容
- 26. 使用will_paginate更新ajax内容
- 27. 使用加入更新状态内容
- 28. 无法使用jquery更新iframe内容
- 29. 使用Frameworkelementfactory不更新按钮内容
- 30. 使用jQuery动态更新DataTable内容