Beispiel für die Verwendung des eingebauten Knoten-Profilers. Ich habe die Leistung nicht verbessert, aber ich habe ein paar Sachen gelernt.
Erstellen eines Volltext-Suchindex von Textdateien in einem lokalen Dateisystem mit Lunr. Derzeit dauert es ungefähr 3 Sekunden, um 1000 Dateien zu indexieren.
./profile.sh
Dadurch wird ein Datei profile_output.txt ausgegeben. Weitere Informationen finden Sie im Abschnitt "Lesen des NodeJS Profiler -Ausgangsausgangs", um diese Datei zu interpretieren.
Wir können sehen, dass 81% der Prozesszeit in „gemeinsamen Bibliotheken“ verbracht werden, 77/81 davon node.exe:
[Summary]:
ticks total nonlib name
315 18.6% 96.6% JavaScript
0 0.0% 0.0% C++
80 4.7% 24.5% GC
1369 80.8% Shared libraries
11 0.6% Unaccounted
[Shared libraries]:
ticks total nonlib name
1303 76.9% C:Program Filesnodejsnode.exe
65 3.8% C:WINDOWSSYSTEM32ntdll.dll
1 0.1% C:WINDOWSSystem32KERNEL32.DLL
Unter Verwendung dieses Online -Profilvisualisierers scheint es, dass die meisten Anrufe zum Knoten auf builder.add zurückzuführen sind, was ein wenig verwirrend ist. Ich denke, dies kann an dem asynchronisierten ReadFile -Anruf hinzufügen, der Builder.add für die Zeit, die Dateien aus dem Dateisystem aufgewendet haben, "verantwortlich". Lassen Sie uns die beiden Operationen trennen.

Es stellt sich heraus, dass das Lesen von Dateien sehr schnell ist. Der Großteil der App -Zeit wird in builder.add verbracht. Builder.Add ruft jedoch node.exe auf, über die wir keine Informationen erhalten.
Ist Spy-Js nützlich? Ich habe es ein paar Minuten ausprobiert und konnte es nur wirklich dazu bringen, mir zu sagen: "Ja, Builder.Add heißt viel".
Gibt es eine Möglichkeit, mehr darüber zu sehen, was im Knoten genannt wird? Und durch was?
Der Standardprofiler ist ein Stichprobenerprofiler, was bedeutet, dass der aktuelle Befehlszeiger in bestimmten Intervallen aufgezeichnet wird.
Es gibt eine Reihe von Tools. Hier ist ein praktisches Online -Online: https://mapbox.github.io/flambearer/# Drag die Datei profile_output.json in diese Site, um die Profilerdaten zu visualisieren.