5

Tôi bắt đầu với Firestore. Tôi đã đọc tài liệu và hướng dẫn về sự kiên trì dữ liệu ngoại tuyến nhưng tôi chưa thực sự rõ ràng nếu Firestore tải xuống lại dữ liệu ngay cả khi nội dung chưa được sửa đổi. Ví dụ: nếu tôi có truy vấn nơi kết quả sẽ được cập nhật mỗi tuần một lần và tôi không cần ứng dụng tải xuống lại nội dung cho đến khi thay đổi được thực hiện, cách tốt nhất về hiệu quả để viết mã ? Cảm ơn!Firestore - Sử dụng bộ nhớ cache cho đến khi cập nhật nội dung trực tuyến

Trả lời

0

Bạn muốn sử dụng "ảnh chụp người nghe" API để lắng nghe câu hỏi của bạn: https://firebase.google.com/docs/firestore/query-data/listen#listen_to_multiple_documents_in_a_collection

Dưới đây là một số hoạt Javascript là một ví dụ:

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(", ")); 
    }); 

Lần đầu tiên bạn chú nghe này FireStore sẽ truy cập mạng để tải xuống tất cả các kết quả truy vấn của bạn và cung cấp cho bạn ảnh chụp nhanh truy vấn, như bạn mong đợi.

Nếu bạn đính kèm cùng một người nghe lần thứ hai và bạn đang sử dụng tính năng kiên trì ngoại tuyến, trình nghe sẽ được kích hoạt ngay lập tức với kết quả từ bộ nhớ cache. Đây là cách bạn có thể phát hiện nếu kết quả của bạn là từ bộ nhớ cache hoặc địa phương:

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); 
     }); 
    }); 

Sau khi bạn nhận được kết quả lưu trữ, FireStore sẽ kiểm tra với máy chủ để xem nếu có bất kỳ thay đổi kết quả truy vấn của bạn. Nếu có, bạn sẽ nhận được một ảnh chụp nhanh khác với các thay đổi.

Nếu bạn muốn được thông báo về những thay đổi mà chỉ liên quan đến siêu dữ liệu (ví dụ nếu không có tài liệu thay đổi nhưng snapshot.metadata.fromCache thay đổi), bạn có thể sử dụng QueryListenOptions khi phát hành truy vấn của bạn: https://firebase.google.com/docs/reference/android/com/google/firebase/firestore/QueryListenOptions

Các vấn đề liên quan