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
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
- 1. Firestore bộ nhớ cache ngoại tuyến
- 2. Sử dụng nginx để phân phối nội dung trực tiếp từ bộ nhớ cache redis
- 3. đọc nội dung bộ nhớ cache CPU
- 4. HTML5 chỉ sử dụng bộ nhớ cache khi ngoại tuyến
- 5. Danh sách nội dung của bộ nhớ cache véc ni?
- 6. Xóa bộ nhớ cache khỏi đường ống nội dung Rails
- 7. Gỡ lỗi khi sử dụng bộ nhớ cache require.js
- 8. Làm sạch và cập nhật bộ nhớ cache ứng dụng html5 qua javascript
- 9. Tăng tốc hoặc tắt cập nhật bộ nhớ cache SVN
- 10. AlphabetIndexer setCursor không cập nhật bộ nhớ cache
- 11. Cập nhật các mẫu được lưu trong bộ nhớ cache
- 12. Tôi có thể sử dụng Bộ nhớ Firebase để phát trực tuyến nhạc trực tuyến không?
- 13. Tải bộ nhớ cache khi ngoại tuyến trong Android Webview
- 14. CMake - Force find_package để cập nhật biến bộ nhớ cache
- 15. Xóa bộ nhớ cache nội bộ của UIWebView
- 16. Chỉ sử dụng ServiceWorker cache khi ngoại tuyến
- 17. ConcurrentModificationException khi cập nhật Iterator được lưu trữ (để thực hiện bộ nhớ cache LRU)
- 18. Nội dung cuộnView cập nhật
- 19. Cách trang bị thêm với OKHttp sử dụng dữ liệu bộ nhớ cache khi ngoại tuyến
- 20. jquery, ẩn nội dung cho đến tải
- 21. Laravel, sử dụng bộ nhớ trong DB cho kết quả bộ nhớ cache
- 22. File_get_contents có sử dụng bộ nhớ cache không?
- 23. Bộ nhớ trong của Android khi cập nhật ứng dụng
- 24. Tệp kê khai bộ nhớ cache: Cài đặt ưa thích trực tuyến là gì?
- 25. Bộ nhớ cache sơ đồ Relay/GraphQL không cập nhật khi tôi cập nhật lược đồ ở phía máy chủ
- 26. Các mẫu ActionMailer cũ được lưu trong bộ nhớ cache?
- 27. Xóa/cập nhật hình ảnh được lưu trong bộ nhớ cache trong khi cập nhật/xóa bản ghi với liipImagineBundle
- 28. Sử dụng biến tĩnh cho dữ liệu bộ nhớ cache
- 29. Nội dung tĩnh không làm mới với symfony2 lệnh bộ nhớ cache rõ ràng
- 30. Video phát trực tuyến bộ nhớ cache với proxy HTTP được nhúng?