NodeJS JSON.stringify () Engpass

8

Mein Dienst gibt Antworten von sehr großen JSON-Objekten zurück - etwa 60 MB. Nach einigem Profiling habe ich festgestellt, dass es fast die ganze Zeit den JSON.stringify() Aufruf ausführt, der benutzt wird, um in eine Zeichenkette zu konvertieren und sie als Antwort zu senden. Ich habe versucht, benutzerdefinierte Implementierungen von stringify und sie sind noch langsamer.

Das ist ein ziemlicher Engpass für meinen Service. Ich möchte in der Lage sein, so viele Anfragen pro Sekunde wie möglich zu bearbeiten - derzeit dauert eine Anfrage 700 ms.

Meine Fragen sind:
1) Kann ich das Senden des Antwortteils optimieren? Gibt es einen effektiveren Weg, als das Objekt zu stringieren und die Antwort zu senden?

2) Wird das asynchrone Modul und die JSON.stringify() in einem separaten Thread insgesamt die Anzahl der Anfragen pro Sekunde verbessern (vorausgesetzt, dass über 90% der Zeit für diesen Anruf ausgegeben werden)?

    
gosho_ot_pochivka 26.02.2014, 16:03
quelle

1 Antwort

8

Sie haben zwei Möglichkeiten:

1) Finden Sie ein JSON-Modul, mit dem Sie die stringify-Operation streamen und in Blöcken verarbeiten können. Ich weiß nicht, ob ein solches Modul da draußen ist, wenn du es nicht bauen musst. BEARBEITEN: Vielen Dank an Reinard Mavronicolas für das Aufzeigen von JSONStream in den Kommentaren. Ich habe es tatsächlich auf meinem Back-Burner gehabt, nach etwas ähnlichem für einen anderen Anwendungsfall zu suchen.

2) async verwendet keine Threads. Sie müssen cluster oder ein anderes tatsächliches Threading-Modul verwenden, um die Verarbeitung in einen separaten Thread zu verschieben. Der Nachteil hier ist, dass Sie immer noch eine große Menge an Daten verarbeiten, Sie gewinnen Bandbreite mit Threads, aber abhängig von Ihrem Datenverkehr können Sie immer noch ein Limit erreichen.

    
Jason 26.02.2014, 16:12
quelle

Tags und Links