Node.js: Blockiert JSON.parse die Ereignisschleife?

8

Verwenden von JSON.parse ist die gebräuchlichste Methode zum Analysieren einer JSON-Zeichenfolge in ein JavaScript-Objekt.

es ist ein synchroner Code, aber blockiert er tatsächlich die Ereignisschleife (seit seiner viel niedrigeren Ebene als der Code des Benutzers)?

gibt es eine einfache Möglichkeit, JSON asynchron zu analysieren? sollte es überhaupt für wenige KB - einige hundert KB JSON-Daten von Bedeutung sein?

    
Gal Ben-Haim 17.09.2013, 06:22
quelle

2 Antworten

6

Eine Funktion, die keine Callback-Blöcke akzeptiert, bis sie einen Wert zurückgibt. Also ja es JSON.parse blockt. Aber das Analysieren von JSON ist eine CPU-intensive Aufgabe und JS ist single-threaded. Also müsste das Parsing den Hauptthread irgendwann blockieren. Async macht nur dann Sinn, wenn auf einen anderen Prozess oder ein anderes System gewartet wird (daher machen Disk-I / O und Netzwerk einen guten Sinn für Async, da sie mehr Latenz haben als die rohe CPU-Verarbeitung).

Ich würde zuerst beweisen, dass das Analysieren von JSON tatsächlich ein Engpass für Ihre App ist, bevor Sie mit der Optimierung der Analyse beginnen. Ich vermute es ist nicht.

    
Alex Wayne 17.09.2013, 06:28
quelle
2

Wenn Sie der Meinung sind, dass Sie viel schweres JSON-Decoding durchführen müssen, ziehen Sie in Betracht, es in einen anderen Prozess zu verschieben. Ich weiß, dass es offensichtlich scheint, aber der Schlüssel zur erfolgreichen Verwendung von node.js ist im Namen.

Verwenden Sie IPC, um einen weiteren "Knoten" einzurichten, der eine schwere CPU-Aufgabe bewältigt. Einfache Sockets reichen aus, aber ØMQ fügt einen Hauch radioaktiver Magie hinzu, da es eine Vielzahl von Transporten unterstützt .

Es kann sein, dass der Overhead beim Verbinden eines Sockets und Senden des JSON insgesamt intensiver ist, aber das Blockieren wird definitiv gestoppt.

    
thomas-peter 08.10.2013 09:01
quelle

Tags und Links