javascript - Node.js profiler - ¿Todo en bibliotecas compartidas?
Actualmente estoy haciendo Advent Of Code (definitivamente lo recomiendo, por cierto, pero fuera de tema). Sin embargo, en el Día 3 estaba bastante descontento con el rendimiento de mi algoritmo.
Así que comencé a usar el perfilador incorporado de Node para probar dónde estoy perdiendo tiempo. Aquí está el enlace al repositorio por si quieres reproducir mis pasos advent-of-code-2019-typescript. Además, si lo ejecutas
npm install
npm run build
antes de ejecutar el profiler
Pasos para reproducir
Estaba siguiendo la guía de node.js para analizar mi código. Así que primero ejecuté mi código del Día 3 con el profiler
node --prof ./dist/src/03.01/index.js
node --prof-process isolate-xxxxxx-v8.log > processed.txt
Ahora la salida realmente no está ayudando
procesado.txt [Sección-Resumen]
[Summary]:
ticks total nonlib name
12 0.0% 70.6% JavaScript
0 0.0% 0.0% C++
344 0.6% 2023.5% GC
56103 100.0% Shared libraries
5 0.0% Unaccounted
Como puedes ver, prácticamente todas las marcas aparecen bajo Bibliotecas compartidas. Supongo que esto sucede porque index.js importa todas las funciones que necesita y las ejecuta. Prácticamente todo debería aparecer bajo JavaScript, pero solo 12 marcas lo hacen.
Si estoy en lo correcto y esta es la razón, mi pregunta sería
¿Cómo puedo resolver la sección de Bibliotecas Compartidas para que realmente muestre todas las funciones que se están llamando y sus ticks?
Bonus-Question
Me alegraría si se respondiera mi pregunta anterior, pero esto me ayudaría aún más. Uso TypeScript, así que el Profiler se ejecuta en el código transpilado. Como resultado, mis funciones aparecen como y tendría que comprobar en el código transpilado qué línea corresponde a qué función. Es posible, pero no es bonito.
¿Hay alguna manera de vincular esto a los archivos de TypeScript?
Respuesta #1
Si sigues la guía de este artículo, iniciarías el proceso de Node.js con --inspect-brk y luego abrirías Chrome y visitarías la pseudo-URL chrome://inspect
Esto debería detectar el puerto abierto de tu proceso de Node.js que está detenido esperando que un depurador se conecte a él.
Una vez que te hayas conectado, puedes elegir las pestañas de Rendimiento y Perfilador para ejecutar períodos de recopilación de datos seguidos de un análisis que te proporcionará perfiles DENTRO de tu pila de código JavaScript.
Si tu código tiene un mapeo de origen adecuado, y has agregado tus carpetas locales a las rutas de origen de Chrome, entonces deberías poder navegar a tu código fuente de Typescript a través de las referencias de línea dentro de la interfaz del perfilador.