我开始使用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. 使用db更改的缓存更新
- 8. 如何通过使用Http缓存控制保存firestore请求?
- 9. 缓存数据,直到更改
- 10. 在WordPress中使用Ajax更新内容
- 11. 缓存,避免缓存内容
- 12. 离线存储内容,直到连接建立
- 13. 检查对角SPA查看缓存清单内容更新
- 14. 由于缓存原因,内容未更新
- 15. 更新缓存控制后,Blob内容类型被删除
- 16. 直到缓存被删除,XML才会更新codeigniter
- 17. MySQL缓存,在更新之前不刷新,直到10分钟之前
- 18. 如果内容在缓存TTL过期之前发生更改,则更新缓存
- 19. Firestore对象更新列表
- 20. html5缓存,每次更新用户在线
- 21. 内存缓存使用PHP
- 22. 缓存和内存使用
- 23. 更新缓存的rx java observables数据(使用嵌套缓存!)
- 24. Firestore - 检查正在更新的文档是否存在
- 25. 线程的缓存在退出时是否会刷新到主内存?
- 26. Android:有没有办法在离线时缓存网页内容?
- 27. Smarty缓存(动态内容)
- 28. 解码Opera缓存内容
- 29. html iframe缓存的内容
- 30. 静态内容缓存