Улучшаем производительность npm-install нестандартным способом

Производительность Node.js  /  Performance

В последнее время всё чаще сталкиваюсь с разработкой на node.js. На работе использую версию LTS, по понятным причинам. Дома поставил 6.3.1.

Идеологически мне больше нравится третий npm — всё-таки хранить дубликаты модулей, особенно когда их много — не здорово. Кстати, для старой версии ноды есть модуль npm3 — позволяет (в лучших традициях партизан) использовать новый npm при установленном старом (только команды будут npm3 install и т.п.). Но сегодня речь не об этом.

Progress bar

Не знаю, насколько для вас это сюрприз, но, таки-да — этот симпатичный (в третьем npm) зверёк ощутимо влияет на производительность npm install. Я, конечно, не буду разводить драму в стиле газетных заголовков и сразу скажу, что, по моим замерам, разница в пределах 20%. И да, progress bar можно отключить глобально в файле .npmrc с помощью одной строчки:

progress=false

Отключать или нет? Хм. Решайте сами :) Я просто дам чуть больше информации. В моём подопытном проекте папка node_modules занимает 160 мегабайт. Проект на стареньком SSD, интернет не самый быстрый. Да, у меня Windows 10, проверял в cmd, ConEmu, Git Bash. Разница между консольками в пределах погрешности. Есть только визуальная разница — в Git Bash прогресс не рисуется, даже если включен :)

С включённым progress bar полный npm install занимает в среднем 25 секунд, без него – 21 секунду.

Лично я себе его отключил, хотя и понимаю, что не так уж часто делаю полный npm install. Для билдов, которые могут идти “начисто” наверное это отключение будет более востребовано. За судьбой баги (да, она уже давно оформлена и горячо обсуждалась) можете последить на GitHub.

Если хотите проверить разницу для своих проектов, вот скрипт для Windows:

npm set progress=true rmdir node_modules /s /q echo %TIME% npm install echo %TIME% npm set progress=false rmdir node_modules /s /q echo %TIME% npm install

А вот скрипт для Linux (запускал у себя на Git Bash):

rm -rf node_modules npm set progress=true time npm install rm -rf node_modules npm set progress=false time npm install

Производительность Node.js  /  Performance