Firestore ile başlıyorum. Çevrimdışı veri kalıcılığıyla ilgili dokümanlar ve eğitimler okudum ancak Firestore, içerik değiştirilmese bile veriyi tekrar indirirse gerçekten açıklamıyorum. Örneğin, sonuçların haftada bir kez güncelleneceği bir sorgu varsa ve değişiklik yapılıncaya kadar uygulamanın içeriği yeniden indirmesine gerek duymuyorsa, kod yazımı için verimlilik açısından en iyi yol hangisidir? ? Teşekkürler!Firestore - Çevrimiçi içerik güncellemelerine kadar önbellek kullanımı
cevap
Sorgunuzda dinlemek için "anlık dinleyici" API kullanmak istiyorum:
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(", "));
});
bu dinleyici takmak ilk defa Firestore erişecek: Burada https://firebase.google.com/docs/firestore/query-data/listen#listen_to_multiple_documents_in_a_collection
örnek olarak bazı JavaScript var Ağın tüm sonuçlarını sorgunuza yükleyebilir ve beklediğiniz gibi bir sorgu anlık görüntüsü sağlar.
Aynı dinleyiciyi ikinci kez eklerseniz ve çevrimdışı kalıcılığını kullanıyorsanız, dinleyici hemen önbellekten alınan sonuçlarla tetiklenir. İşte size sonuç önbellek veya yerel olup olmadığını tespit edebilirsiniz: önbelleğe sonuç almak sonra Firestore sorgu sonucu herhangi bir değişiklik olup olmadığını görmek için sunucu ile kontrol edecektir
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);
});
});
. Eğer evetse, değişikliklerle başka bir anlık görüntü elde edeceksiniz. https://firebase.google.com/docs/reference/android/com/google/firebase/firestore/QueryListenOptions
:sorgunuzu veren yaparken QueryListenOptions
kullanabilirsiniz (hiçbir belge snapshot.metadata.fromCache
değişiklikleri değiştirmek ama eğer örneğin) sadece meta içeren değişikliklerden haberdar olmak istiyorsanız