Ejemplo del uso del Profiler NodeJS incorporado. No mejoré el rendimiento, pero aprendí algunas cosas.
Creación de un índice de búsqueda de texto completo de archivos de texto en un sistema de archivos local, utilizando LUNR. Actualmente tarda unos 3 segundos en indexar 1000 archivos.
./profile.sh
Esto genera un archivo profile_output.txt . Consulte la sección 'Reading the NodeJS Profiler' Output 'a continuación para interpretar este archivo.
Podemos ver que el 81% del tiempo de proceso se gasta en 'bibliotecas compartidas', 77/81 de ese ser nodo.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
Usando este visualizador de perfil en línea, parece que la mayoría de las llamadas al nodo se deben a Builder.Add, lo cual es un poco confuso. Creo que esto puede deberse al ASYNC ReadFile Calling Add, que está 'culpando' a Builder.Add por el tiempo dedicado a leer archivos del sistema de archivos. Separemos las dos operaciones.

Resulta que leer archivos es muy rápido. La mayor parte del tiempo de la aplicación se gasta en Builder. Add. Sin embargo, Builder.add llama a node.exe, más allá del cual no obtenemos información.
¿Es útil Spy-JS? Lo probé durante unos minutos y solo pude conseguir que me dijera 'sí, el constructor.Add se llama mucho'.
¿Hay alguna forma de ver más sobre cómo se llama en el nodo? ¿Y por qué?
El perfilador predeterminado es un perfilador de muestreo, lo que significa que registra el puntero de instrucciones actual a ciertos intervalos.
Hay una serie de herramientas, aquí hay una práctica en línea: https://mapbox.github.io/flameBearer/# arrastre el archivo profile_output.json a ese sitio para visualizar los datos de perfilador.