Пример использования встроенного профилировщика Nodejs. Я не улучшил производительность, но я узнал кое -что.
Создание полнотекстового индекса поиска текстовых файлов в локальной файловой системе, используя LUNR. В настоящее время требуется около 3 секунд для индекса 1000 файлов.
./profile.sh
Это выводит файл profile_output.txt . См. Раздел «чтение вывода Nodejs Profiler» ниже для интерпретации этого файла.
Мы можем видеть, что 81% времени процесса тратится в «общих библиотеках», 77/81 из этого 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
Используя этот онлайн -профиль визуализатор, кажется, что большинство вызовов в узле связаны с Builder.Add, что немного запутанно. Я думаю, что это может быть связано с Async Readfile Call Add, который «обвиняет» Builder.add в течение времени, потраченного на чтение файлов из файловой системы. Давайте разделяем две операции.

Оказывается, что файлы чтения очень быстро. Большая часть времени приложения тратится в Builder.Add. Тем не менее, Builder.Add вызывает node.exe, за пределами которой мы не получаем информации.
Spy-JS полезен? Я попробовал это в течение нескольких минут, и мог лишь действительно заставить его сказать мне: «Да, Builder.Add называется много».
Есть ли способ узнать больше о том, что в узле называется? А что?
Профилировщик по умолчанию - это профилировщик выборки, что означает, что он записывает текущий указатель инструкции через определенные интервалы.
Существует несколько инструментов, вот удобный онлайн -один: https://mapbox.github.io/flamebearer/# перетаскивать файл profile_output.json в этот сайт, чтобы визуализировать данные профилировщика.