Exemplo de uso do Profiler NodeJS integrado. Não melhorei o desempenho, mas aprendi algumas coisas.
Construindo um índice de pesquisa de texto completo de arquivos de texto em um sistema de arquivos local, usando LUNR. Atualmente, leva cerca de 3 segundos para indexar 1000 arquivos.
./profile.sh
Isso produz um arquivo profile_output.txt . Consulte a seção 'Reading the NodeJS Profiler Saída' abaixo para como interpretar esse arquivo.
Podemos ver que 81% do tempo de processo é gasto em 'bibliotecas compartilhadas', 77/81, sendo 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
Usando este visualizador de perfil on -line, parece que a maioria das chamadas para o nó é devida ao construtor.Add, o que é um pouco confuso. Eu acho que isso pode ser devido ao ASYNC READFile Calling Add, que é 'culpar' Builder.add pelo tempo gasto lendo arquivos no sistema de arquivos. Vamos separar as duas operações.

Acontece que a leitura de arquivos é muito rápida. A maior parte do tempo do aplicativo é gasta no construtor. No entanto, Builder.add chama Node.exe, além da qual não obtemos informações.
Spy-js é útil? Eu tentei por alguns minutos e só consegui me dizer 'sim, o construtor.Add é chamado muito'.
Existe uma maneira de ver mais sobre o que está sendo chamado? E por quê?
O Profiler padrão é um perfil de amostragem, o que significa que registra o ponteiro de instruções atual em determinados intervalos.
Existem várias ferramentas, aqui está uma prática on -line: https://mapbox.github.io/flamebear/# arraste o arquivo profile_output.json nesse site para visualizar os dados do Profiler.