Firestore Problem langsam auf das abrufen von Daten
Bin ich mit langsamen performance-Probleme mit Firestore beim abrufen basic gespeicherten Daten in einem Dokument im Vergleich zu den Echtzeit-Datenbank mit 1/10-Verhältnis.
Mit Firestore, dauert es durchschnittlich 3000 ms auf den ersten Anruf
this.db.collection(‘testCol’)
.doc(‘testDoc’)
.valueChanges().forEach((data) => {
console.log(data);//3000 ms later
});
Mithilfe der Echtzeit-Datenbank, dauert es durchschnittlich von 300 ms auf den ersten Anruf
this.db.database.ref(‘/test’).once(‘value’).then(data => {
console.log(data); //300ms later
});
Dies ist ein screenshot von den Netzwerk-Konsole :
Ich bin mit den Javascript-SDK v4.50 mit AngularFire2 v5.0 rc.2.
Hat jemand Erfahrung mit diesem Problem ?
- Leistung, was sehen Sie, wenn Sie einen zweiten Anruf (auf ein anderes Dokument / Sammlung)? Siehst du das gleiche Problem, wenn Sie nicht angularfire?
- Ich habe eine ähnliche Erfahrung. Erste Anruf ist ein bisschen langsam, 5-10s manchmal. Ich mache eine chat-app - erste msg eine Weile dauert, um zu liefern, folgenden sind fast instant, though. Firestore ist noch beta, sind Sie wahrscheinlich immer noch aussortieren Macken.
- Ähnliche Erfahrung hier. Erste onSnapShot nimmt eine unerhörte Höhe der Zeit - bis zu 2 Minuten für einige Benutzer, die rendering unsere app unbrauchbar
- Gleiche problem frustrierend. Einige berichten, dass ein schreiben geben das "hung" Abfragen.
- Gleiche Problem, bis zu 1,5 Minuten mit einer einfachen Sammlung.erhalten(Dokument)
- Die offline-Ebene ist der Schuldige. Wenn Sie don ' T run "enablePersistence()", die app beschleunigt sofort. Unsere Beobachtungen sind in Erster Linie von Android-Geräten (mithilfe von Cordova).
- Tritt das problem immer noch vorhanden???
- jetzt Feuerstellung Echtzeit-Datenbank in der android-Aktivierung (offline-Modus) hat auch anfangs langsam Zeit, ich habe gezwungen, um zu verwenden, REST mit cloud-Funktionen, die viel schneller.
- keine neuen Ratschläge, jetzt, Firestore ist die Produktion fertig?
- nur um zu bestätigen, dass ich immer noch das problem reproduzieren.... rund 8 Sekunden zum abrufen eines einzelnen Dokuments.
await firestore.collection("photos").doc(id).get()
Du musst angemeldet sein, um einen Kommentar abzugeben.
UPDATE: 12th Feb 2018 - iOS Firestore SDK v0.10.0
Ähnlich wie einige andere Kommentatoren, ich habe auch bemerkt, dass eine langsamere Reaktion auf die erste get-Anfrage (mit nachfolgenden Anforderungen unter ~100ms). Für mich ist es nicht so schlimm, wie 30, aber vielleicht um 2-3s wenn ich eine gute Konnektivität, was genug ist, um eine schlechte user-experience, wenn meine app gestartet wird.
FB hingewiesen haben, dass Sie bewusst von diesem "Kaltstart" - Problem und Sie arbeiten an einer langfristigen Lösung für Sie - keine ETA-leider. Ich denke, es ist ein separates Problem, dass wenn ich die schlechten verbindungen kann es Jahre dauern (über 30s), bevor die get-Anfragen entscheiden, Lesen aus dem cache.
Während der Feuerstellung lösen all diese Probleme, habe ich angefangen mit den neuen
disableNetwork()
undenableNetwork()
Methoden (erhältlich in Firestore v0.10.0) zur manuellen Steuerung des online - /offline-Status von FB. Aber ich habe zu sehr vorsichtig, wo ich es in meinen code, da es eine Firestore Fehler, können einen Absturz verursachen, unter bestimmten Szenarien.UPDATE: 15-Nov-2017 - iOS Firestore SDK v0.9.2
Scheint es das langsame performance-Problem wurde nun behoben. Ich habe re-führen Sie die unten beschriebenen tests und die Zeit, die für Firestore zur Rückgabe der 100 Dokumente, die jetzt zu sein scheint, sich konsequent um 100ms.
Nicht sicher, ob dies war ein Update, das neueste SDK v0.9.2 oder, wenn es ein backend-Update (oder beides), aber ich schlage vor, alle updates Ihrer FB-pods. Meine app ist deutlich schneller - ähnlich, wie es war auf der Echtzeit-DB.
Ich habe auch entdeckt, Firestore viel langsamer als in Echtzeit DB, vor allem beim Lesen von vielen Unterlagen.
Aktualisierten tests (mit dem neuesten iOS Firestore SDK v0.9.0):
Habe ich ein test-Projekt in iOS Swift mit beiden RTDB und Firestore und lief 100 sequenzielle lese-Operationen auf den einzelnen. Für die RTDB, getestet habe ich die observeSingleEvent und beobachten Sie Methoden auf jedes der 100 top-level-Knoten. Für Firestore, habe ich die getDocument und addSnapshotListener Methoden an jedem der 100 Dokumente in der TestCol Sammlung. Ich lief die tests mit disk Persistenz auf und ab. Bitte Lesen Sie das angehängte Bild, zeigt die Datenstruktur, die für jede Datenbank.
Lief ich den test 10 mal für jede Datenbank auf dem gleichen Gerät und eine stabile wifi-Netzwerk. Vorhandene Beobachter und Zuhörer waren zerstört, vor jedem neuen Lauf.
Realtime DB observeSingleEvent Methode:
Realtime DB-beobachten-Methode:
Firestore getDocument-Methode:
Firestore addSnapshotListener Methode:
Jede Methode im wesentlichen druckt die unix-Zeitstempel in Millisekunden, wenn die Methode beginnt mit der Ausführung und druckt anschließend ein anderes unix-timestamp bei jeder lese-operation gibt. Ich nahm den Unterschied zwischen dem ersten Zeitstempel und dem letzten Zeitstempel zurück.
ERGEBNISSE - Disk Persistenz deaktiviert:
ERGEBNISSE - Disk-Persistenz aktiviert:
Datenstruktur:
Wenn die Firestore getDocument /addSnapshotListener Methoden nicht weiterkommen, so scheint es, stecken zu bleiben für die Dauer, die etwa ein Vielfaches von 30 Sekunden. Vielleicht könnte dies helfen, das FB-team isolieren, in denen in der SDK ist es immer stecken geblieben?
Update Datum März 02, 2018
Sieht es aus wie dies ist ein bekanntes Problem und die Entwickler bei Firestore sind an einem Update arbeitet. Nach ein paar E-Mail-Austausch und code-sharing mit einer Firestore-Ingenieur auf dieses Problem, das war seine Antwort als heute.
So, hoffentlich wird dies ein K.o.-bald.
Mittels Swift - /iOS -
Nach dem Umgang mit diesem für etwa 3 Tage, es scheint, das Problem ist definitiv die get() ie .getDocuments und .getDocument. Dinge, die ich dachte seien die Ursache für die extreme noch intermittierende Verzögerungen aber nicht der Fall zu sein:
Konnte ich in der Regel auch alle diese als bemerkte ich dieses Problem nicht passiert mit jeder Firestore-Datenbank nennen, die ich machte. Nur Abfragen mit get(). Für den Kick habe ich ersetzt .getDocument mit .addSnapshotListener, um wieder an meine Daten und voila. Sofortige Abruf jeder Zeit, einschließlich der ersten Anruf. Keine Kaltstarts. Bisher keine Probleme mit dem .addSnapshotListener, nur getDocument(s).
Für jetzt, ich bin einfach fallenlassen der .getDocument (), wo die Zeit ist das Wesen und ersetzen Sie es mit .addSnapshotListener dann mit
... in Ordnung zu halten, sich zu bewegen, bis diese ausgearbeitet erhält durch Firestore.
Hatte ich dieses Problem bis heute morgen. Meine Firestore-Abfrage via iOS/Swift etwa 20 Sekunden, um eine einfache, vollständig indizierte Abfrage - mit nicht-proportional-Abfrage mal für 1 Element zurückgegeben - den ganzen Weg bis zu 3.000.
Meine Lösung war das deaktivieren von offline-Daten-Persistenz. In meinem Fall, es trifft nicht die Bedürfnisse unserer Firestore-Datenbank - das hat große Teile seiner Daten täglich aktualisiert.
iOS & Android-Nutzer haben diese option standardmäßig aktiviert, während web-Benutzer haben es standardmäßig deaktiviert. Es macht Firestore scheinen wahnsinnig langsam, wenn Sie die Abfrage eine riesige Sammlung von Dokumenten. Grundsätzlich speichert es eine Kopie von, welche Daten Sie Abfragen und je nachdem welche Sammlung Sie gerade Abfragen, ich glaube, es speichert alle Dokumente in), die führen kann zu hohe Speicherauslastung.
In meinem Fall, verursacht es eine riesige warten, für jede Abfrage, bis das Gerät hatte zwischengespeicherten Daten erforderlich - daher die nicht-proportionale Abfrage mal für die steigende Zahl der Elemente zurück, aus der genau die gleiche Sammlung. Dies ist, denn es hat die gleiche Menge an Zeit, um den cache der Sammlung, die in jeder Abfrage.
Offline-Daten aus der Cloud Firestore Docs
Trat ich einige benchmarking zur Anzeige dieser Effekt (mit offline-Persistenz aktiviert) aus der gleichen abgefragt Sammlung, aber mit unterschiedlichen Mengen der Elemente, die zurückgegeben mit der .limit-parameter:
Jetzt bei 100 Elemente zurückgegeben (mit offline-Persistenz deaktiviert), meine Anfrage dauert weniger als 1 Sekunde.
Meine Firestore-Abfrage-code ist unten:
gut aus, was ich momentan arbeite und Forschung, indem Sie nexus 5X im emulator und echtes android-Handy Huawei P8,
Firestore und Cloud-Speicher sind beide geben mir Kopfschmerzen der langsamen Reaktion
wenn ich erste Dokument.get() und first storage.getDownloadUrl()
Es mir mehr als 60 Sekunden Antwort auf jede Anfrage. Die langsame Reaktion nur geschehen in der realen android-Handy. Nicht im emulator. Eine weitere seltsame Sache.
Nach der ersten Begegnung, die rest-Anforderung ist glatt.
Ist hier der einfache code, wo treffe ich die langsame Reaktion.
Fand ich auch link, dass ist die Erforschung der gleiche.
https://reformatcode.com/code/android/firestore-document-get-performance