2012-08-16 10 views
14

Ich baue eine Web-Anwendung mit Firebase, die die gleichen Daten und präsentiert es auf zwei verschiedene Arten - in einer Liste und als Marker auf einer Google-Karte.Firebase - verbessert Caching die Leistung?

Im Moment habe ich in jeder Ansicht - Karte oder Liste - Code, um Daten von Firebase abzufragen, zusammenzuführen und anzuzeigen. Stattdessen überlege ich mir diesen Plan: Beim Start die Daten abfragen, zusammenführen und alles in ein Array speichern, das ich von der Ansicht zur Anzeige überlasse.

In gewisser Weise bin ich "caching" die Firebase Daten in einem Array. In einem Sinn ist das nicht ideal - zwischengespeicherte Daten sind nicht so aktuell wie das direkte Abfragen von Firebase. Auf der anderen Seite, rufe ich Firebase nur einmal an.

Macht das Leistung Sinn? Nimmt das Lesen von Daten aus einer Firebase innerhalb der gleichen Größenordnung wie das Lesen von Daten aus einem Array?

Antwort

21

Im Allgemeinen ist das Zwischenspeichern von Daten zur Begrenzung der Firebase-Nutzung nicht erforderlich. Firebase verwaltet einen eigenen Cache mit "aktiven" Daten auf dem Client. "Aktiv" ist definiert als Daten, für die ein "An" -Aufruf aussteht. Daher müssen für alle aktiven Daten keine zusätzlichen "Ein" - oder "Einmal" -Aufrufe durchgeführt werden, da die Daten bereits geladen wurden.

Ich bin nicht ganz sicher, was Sie mit "abfragen Firebase" meinen. Firebase hat keine Abfragen im herkömmlichen Sinne. Es hat einfach Methoden zum Anhängen von Rückrufen. Verwenden Sie die Funktion "once()", um regelmäßig Daten von Firebase zu erhalten? Wenn dies der Fall ist, könnte dies möglicherweise sehr ineffizient sein. Einmal ist eine Bequemlichkeitsmethode und sollte im Allgemeinen nur für Daten verwendet werden, auf die extrem selten zugegriffen wird oder die der Entwickler aus irgendeinem Grund nicht in Echtzeit aktualisieren möchte. Wenn nach dem Abschluss von once() keine aktiven "on" -Aufrufe ausstehen, löscht Firebase den Cache dieser Daten, und alle nachfolgenden Aufrufe von once() erfordern einen Roundtrip zum Server.

Wenn Sie möchten, was ein Weg ist, um synchron eine lokale Kopie der neuesten Version der Daten auf effiziente Art und Weise zuzugreifen, empfehle ich diese Methode:

var savedSnapshot = null; 
dataRef.on("value", function(snapshot) { 
    savedSnapshot = snapshot; 
}); 

//and then when you need to read the data 
var theData = savedSnapshot.val() 

Durch eine einzige Aufrechterhaltung auf() -Aufruf, Firebase ist in der Lage, Ihre Daten auf dem neuesten Stand zu halten, indem nur Deltas über den Draht gesendet werden, wenn sich die Dinge ändern, anstatt alle Daten jedes Mal neu zu laden, wenn Sie sie benötigen.

+1

Große Erklärung. Die Dokumente, übrigens, geben diesen Eindruck, aber gehen Sie nicht so sehr ins Detail (das könnte ein großartiger Anhang zu den Dokumenten sein) – Kato

+1

Wir planen, der Dokumentation in naher Zukunft einige Abschnitte zur Leistung hinzuzufügen. –

+0

@AndrewLee wird dieser Performance-Bereich jemals geschrieben werden? Ich benutze Firebase nun schon seit 2 Jahren und habe nicht genau so "geklickt", wie diese 5-jährige Antwort erklärt hat, wie man einen Datensnapshot für die spätere Verwendung speichern kann. Ich erkenne jetzt, dass ich ziemlich viel defensiv programmiert habe, aus Angst, nicht zu wissen, was Firebase macht und intern nicht "cache". Ich sehe jetzt, dass ein DataSnapshot nur ein navigierbarer Cursor zu einer internen unveränderlichen Datenstruktur ist, und dass 'val()' seine Daten in ein POJO klont. Das ist so elegant gestaltet! Hut ab :-) – skrebbel

Verwandte Themen