caching - Firestore - 使用缓存直到在线内容更新

标签 caching download persistence offline google-cloud-firestore

我从 Firestore 开始。我已经阅读了有关离线数据持久性的文档和教程,但我不太清楚 Firestore 是否会再次下载数据,即使内容没有被修改。
例如,如果我有一个查询,结果将每周更新一次,并且在进行更改之前我不需要应用程序再次下载内容,那么就编写代码的效率而言,最好的方法是什么?
谢谢!

最佳答案

您想使用“快照监听器”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

关于caching - Firestore - 使用缓存直到在线内容更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46868580/

相关文章:

php - MySQL 查询需要 >15 秒才能运行;我可以做些什么来缓存/改进它?

火狐缓存图片下载

caching - Go webserver - 不要使用时间戳缓存文件

Delphi对象持久化,什么是最好的方法

java - 缓存远程 EJB 3.0 引用

file - 使用grails下载大文件

iphone - iOS 文件下载

javascript - 我正在尝试创建一个下载按钮,但文件没有下载?

java - 业务类和领域类有什么区别?持久类是什么意思?

JavaEE6 : HowTo select a persistence unit for entity manager by login information