Как померять время выполнения команды в терминале?
#cli
TL;DR Используйте hyperfine
Стандартный способ померять время исполнения команды посредством time.
Пример:
Если
Пример:
Для оценки cli команд тоже есть benchmark. Называется hyperfine. Он может сравнивать несколько команд, делать прогрев или подготовку.
Пример:
Его удобно использовать в извечном холиваре #nodejs разработчиков: yarn vs npm. Вот так можно сделать сравнение для вашего проекта:
#cli
TL;DR Используйте hyperfine
Стандартный способ померять время исполнения команды посредством time.
Пример:
time npm run build.Если
time использовать в связке с curl, то можно узнать время выполнения запроса. Для такой задаче лучше подходит ab. Это сокращение от apache benchmark. Это команда отправляет не один запрос на указанный URL, а несколько. На основание результатов считаются статистики: средние, квартили и тп. Поэтому в название и есть benchmark.Пример:
ab -n 10 http://localhost:3000/Для оценки cli команд тоже есть benchmark. Называется hyperfine. Он может сравнивать несколько команд, делать прогрев или подготовку.
Пример:
hyperfine 'npm run build'.Его удобно использовать в извечном холиваре #nodejs разработчиков: yarn vs npm. Вот так можно сделать сравнение для вашего проекта:
hyperfine --prepare 'rm -rf node_modules' 'yarn' 'npm install'Что такое .npmrc и почему его стоит добавить?
#cli
У npm как и других #nodejs инструментов есть конфигурация через rc файл. Вы можете разместить
Полный перечень параметров в приведен документации. Рассмотрим те, которые стоит отключить:
➡️ update-notifier – регулярно показывает сообщение, что пора обновиться. Делать этого не стоит.
➡️ fund, выводит xx packages are looking for funding. Поддержите opensource и смело выключайте.
➡️ audit, после каждого npm install показывает сжатый security audit. После добавления
Выключение всех этих параметров уменьшит количество бесполезных логов. Осталось изменить уровень loglevel с notice на error и получим
В yarn-based проектах необходимо использовать .yarnnc. Он не заменяет, а дополняет .npmrc. Посмотреть результат конфигурации
#cli
У npm как и других #nodejs инструментов есть конфигурация через rc файл. Вы можете разместить
.npmrc в папке проекта или в папке $HOME . Используйте npm config list, чтобы увидеть итоговую конфигурацию.Полный перечень параметров в приведен документации. Рассмотрим те, которые стоит отключить:
➡️ update-notifier – регулярно показывает сообщение, что пора обновиться. Делать этого не стоит.
➡️ fund, выводит xx packages are looking for funding. Поддержите opensource и смело выключайте.
➡️ audit, после каждого npm install показывает сжатый security audit. После добавления
npm audit в CI можно смело выключать.Выключение всех этих параметров уменьшит количество бесполезных логов. Осталось изменить уровень loglevel с notice на error и получим
.npmrc, который выводит в CI только важную информацию:loglevel=errorfund=falseupdate-notifier=falseaudit=falseВ yarn-based проектах необходимо использовать .yarnnc. Он не заменяет, а дополняет .npmrc. Посмотреть результат конфигурации
yarn config list👍4
Как определить не используемые зависимости?
#package #cli
На картинке популярный мем про
Проверьте свой проект. Вдруг в
#package #cli
На картинке популярный мем про
node_modules. Одной из причин раздутия данной папки являются неиспользуемые зависимости. Для облегчения их нахождения существует пакет depcheck. Устанавливать его в приложения не нужно, достаточно запустить npx depcheck . Данная команда покажет неиспользуемые и забытые зависимости. Работает как с javascript, так и с typescript. Верить результатам на 100% не стоит, особенно, если вы используете в коде магию🪄🎩.Проверьте свой проект. Вдруг в
package.json пора навести порядок.👍1
Как автоматизировать работу с git?
#cli #git
У git есть малодокументированная возможность – external commands, то есть команды определенные пользователем. Упрощено говоря, git somename это алиас для команды git-somename.
Использовать можно так:
1️⃣ Смотрим зарегистрированные пути
2️⃣ Выбираем папку из 1️⃣, где мы будем создавать команду.
3️⃣ Делаем файл с нашей команда git-done и таким контентом:
4️⃣ Делаем файл исполняемым
Так мы создали команду
Обратите внимание на первую строчку #!/usr/bin/env bash, после #! (shebang) идет интепритатор. Для написания скрипта на #nodejs используется конструкция #!/usr/bin/env node
Можно установить один из готовых скриптов:
Так же для проектов с GitHub рекомендую посмотреть cli.github.com
#cli #git
У git есть малодокументированная возможность – external commands, то есть команды определенные пользователем. Упрощено говоря, git somename это алиас для команды git-somename.
Использовать можно так:
1️⃣ Смотрим зарегистрированные пути
echo $PATH.2️⃣ Выбираем папку из 1️⃣, где мы будем создавать команду.
3️⃣ Делаем файл с нашей команда git-done и таким контентом:
#!/usr/bin/env bashDEFAULT_BRANCH=masterCURRENT_BRANCH=$(git branch | grep \* | cut -d ' ' -f2)git checkout ${DEFAULT_BRANCH}git pullgit branch -D ${CURRENT_BRANCH}4️⃣ Делаем файл исполняемым
chmod +x git-doneТак мы создали команду
git done, которая удаляет активную ветку и переключает на master. У меня это команда еще передвигает текущую задачу в следующую колонку в Jira.Обратите внимание на первую строчку #!/usr/bin/env bash, после #! (shebang) идет интепритатор. Для написания скрипта на #nodejs используется конструкция #!/usr/bin/env node
Можно установить один из готовых скриптов:
npm install -g git-open. Он будет открывать текущую ветку в вашем репозитории. ПодробностиТак же для проектов с GitHub рекомендую посмотреть cli.github.com
На что влияет environment variable
#cli
Переменная окружения
Я предпочитаю его переопределять на Visual Code.
В зависимости от того, какой shell вы используете это строчку необходимо внести в
Примеры, когда будет вызван редактор:
➡️
➡️
➡️ при клике по строчке ошибки в браузере вашего React приложения.
Есть быть более точным, то многое программное обеспечение использует EDITOR, если не задан SOMETHING_EDITOR. Например, можно использовать
EDITOR?#cli
Переменная окружения
EDITOR определяет, какой текстовый редактор использовать при многострочном пользовательском вводе или редактирование файла. По умолчанию в Unix системах это vim, в Windows – notepad.exe.Я предпочитаю его переопределять на Visual Code.
export EDITOR='code'В зависимости от того, какой shell вы используете это строчку необходимо внести в
~/.profile, ~/.bashrc, ~.zshrc, то есть в конфигурационный файл вашего shell.Примеры, когда будет вызван редактор:
➡️
npm config edit➡️
git commit➡️ при клике по строчке ошибки в браузере вашего React приложения.
Есть быть более точным, то многое программное обеспечение использует EDITOR, если не задан SOMETHING_EDITOR. Например, можно использовать
REACT_EDITOR и GIT_EDITOR, но не NPM_EDITOR. Читайте документацию или исходный код конкретного ПО.Как обнаружить синхронные операции в Node.js коде?
#nodejs_api
Каждый #nodejs разработчик знает, что блокировать Event Loop-а плохо. Блокировка может быть по двум причинам:
– cpu intensive операции, т.е. с большим количеством вычислений. Примеры: трансформация JSON объекта на 2 мегабайта, обход большого массива, подсчеты хешей.
– синхронные операции, т.е. операции которые до своего завершения блокируют Event Loop, читай дальнейшее выполнение JavaScript. Пример – все синхронные файловые операции.
Ваш код может использовать синхронные операции неявно. Кто его знает, что там в node_modules. Именно о том, как быстро найти такие места этот рецепт.
У Node.js есть специальный флаг --trace-sync-io. При его использование в консоль будут выводить trace для первого вызова любого синхронного вызова. Запускаем с этим флагом или c переменной окружения
Рецепты по теме:
- Как запускать Node.js с доп. аргументами?
#nodejs_api
Каждый #nodejs разработчик знает, что блокировать Event Loop-а плохо. Блокировка может быть по двум причинам:
– cpu intensive операции, т.е. с большим количеством вычислений. Примеры: трансформация JSON объекта на 2 мегабайта, обход большого массива, подсчеты хешей.
– синхронные операции, т.е. операции которые до своего завершения блокируют Event Loop, читай дальнейшее выполнение JavaScript. Пример – все синхронные файловые операции.
Ваш код может использовать синхронные операции неявно. Кто его знает, что там в node_modules. Именно о том, как быстро найти такие места этот рецепт.
У Node.js есть специальный флаг --trace-sync-io. При его использование в консоль будут выводить trace для первого вызова любого синхронного вызова. Запускаем с этим флагом или c переменной окружения
NODE_OPTIONS=--trace-sync-io и анализируем результаты. На своем проекте я так обнаружил, что пора выкинуть module-alias и переконфигурировать pino.Рецепты по теме:
- Как запускать Node.js с доп. аргументами?
Что нужно знать об Error stack trace?
#nodejs_api
В JavaScript есть встроенный объект Error, который сохраняет stack trace (на русском трассировка стека). Так называется список методов, которые были вызваны до момента, когда в приложении произошло ошибка. Он доступен как error.stack и выглядит так:
Плохой практикой является использование throw c литералами или объектами не наследниками Error. У них не будет stack trace.
По умолчанию длина стэка ограничена 10 методами. Параметр можно изменить на уровне кода через Error.stackTraceLimit. На уровне v8 существует флаг --stack-trace-limit. Его можно передать как аргумент или через переменную окружения NODE_OPTIONS=--stack-trace-limit=10
Начиная с 12-ой версии Node.js у нас есть поддержка Async Stack Traces. Пример stack trace:
Для поддержки этих stack trace рекомендуется делать await перед return. Подробней в nodebestpractices.
Если код скомпилирован с помощью babel или typescript, то правильным будет показывать stack trace для исходного кода, а не скомпилированного. Для этого использовался пакет source-map-support. Под капотом идет использование Error.prepareStackTrace. Однако сейчас Node.js умеет это делать из коробки с помощью флага --enable-source-maps
#nodejs_api
В JavaScript есть встроенный объект Error, который сохраняет stack trace (на русском трассировка стека). Так называется список методов, которые были вызваны до момента, когда в приложении произошло ошибка. Он доступен как error.stack и выглядит так:
Error: Things keep happening!
at /home/user/file.js:525:2
at Frobnicator.refrobulate (/home/user/business-logic.js:424:21)
at Actor.<anonymous> (/home/user/actors.js:400:8)
at increaseSynergy (/home/user/actors.js:701:6)Плохой практикой является использование throw c литералами или объектами не наследниками Error. У них не будет stack trace.
По умолчанию длина стэка ограничена 10 методами. Параметр можно изменить на уровне кода через Error.stackTraceLimit. На уровне v8 существует флаг --stack-trace-limit. Его можно передать как аргумент или через переменную окружения NODE_OPTIONS=--stack-trace-limit=10
Начиная с 12-ой версии Node.js у нас есть поддержка Async Stack Traces. Пример stack trace:
Error: Oops at bar (/workspace/test.js:11:9) at async run (/workspace/test.js:5:3)Для поддержки этих stack trace рекомендуется делать await перед return. Подробней в nodebestpractices.
Если код скомпилирован с помощью babel или typescript, то правильным будет показывать stack trace для исходного кода, а не скомпилированного. Для этого использовался пакет source-map-support. Под капотом идет использование Error.prepareStackTrace. Однако сейчас Node.js умеет это делать из коробки с помощью флага --enable-source-maps
👍3
Как запустить JavaScript код из буфера обмена?
#cli
TL;DR Используйте
Сразу скажу, что сегодняшний рецепт для unix пользователей, т.е. MacOS и Linux. Под Windows я не проверял.
В unix есть оператор pipe, который выглядит так
Еще в unix есть две команды
Собственно на этом объяснение магии сегодняшнего рецепта окончено. Скопируйте в буфере JS код, который вы хотите запустить и выполните в терминале
#cli
TL;DR Используйте
pbpaste | nodeСразу скажу, что сегодняшний рецепт для unix пользователей, т.е. MacOS и Linux. Под Windows я не проверял.
В unix есть оператор pipe, который выглядит так
|. С его помощью можно делать цепочки команд передавая результат выполнения из одной в другую. Вот примеры использования:ps -ax | grep nodehistory | grep kubectlЕще в unix есть две команды
pbcopy и pbpaste. С их помощью можно записывать или читать из буфера обмена. Попробуйте:pbcopy < package.jsonpbpasteСобственно на этом объяснение магии сегодняшнего рецепта окончено. Скопируйте в буфере JS код, который вы хотите запустить и выполните в терминале
pbpaste | nodeКак и что настроить в git?
#git #cli
1️⃣Указать имя и емейл
Зачем? Чтобы комиты были залинкованы с вашей учеткой в github/gitlab.
Можно настроить для каждого репозитория отдельно. Важно, если вы overemployed.
2️⃣Подключить ssh ключ
Зачем? Чтобы не вводить логин и пароль каждый раз
1. Generating a new SSH key
2. Add your SSH key to the ssh-agent
3. Adding a new SSH key to your GitHub account
или полная документация
3️⃣Изменить текстовый редактор
Зачем? Чтобы использовать привычный редактор, а не vim.
Данный пример установить visual code как git редактор. Проверить можно git commit без флага -m.
4️⃣Автогенерация .gitignore
Зачем? Чтобы экономить время во время старта нового репозитория
1. Откройте gitignore.io.
2. Выберите node, операционку, IDE и т.д.
3. Сохраните в .gitignore вашего репозитория
4. Добавляйте специфичные для вашего проекта файлы, а не для тех. стэка.
5️⃣Использование глобального .gitignore
Зачем? Чтобы не закинуть в git вещи специфичные для вашего окружения.
Сохраните вещи из 4️⃣ в ~/.gitignore_global
Хорошая практика держать там .env файл
Из комментариев:
Начинающему техлиду стоит использовать .gitattributes для выставления конца строки на уровне репозитория с помощью core.autocrlf. Тогда джуны сидящие на Windows не буду страдать.
#git #cli
1️⃣Указать имя и емейл
Зачем? Чтобы комиты были залинкованы с вашей учеткой в github/gitlab.
git config --global user.name "Your Name"git config --global user.email you@example.comМожно настроить для каждого репозитория отдельно. Важно, если вы overemployed.
2️⃣Подключить ssh ключ
Зачем? Чтобы не вводить логин и пароль каждый раз
1. Generating a new SSH key
2. Add your SSH key to the ssh-agent
3. Adding a new SSH key to your GitHub account
или полная документация
3️⃣Изменить текстовый редактор
Зачем? Чтобы использовать привычный редактор, а не vim.
git config --global core.editor "code --wait"Данный пример установить visual code как git редактор. Проверить можно git commit без флага -m.
4️⃣Автогенерация .gitignore
Зачем? Чтобы экономить время во время старта нового репозитория
1. Откройте gitignore.io.
2. Выберите node, операционку, IDE и т.д.
3. Сохраните в .gitignore вашего репозитория
4. Добавляйте специфичные для вашего проекта файлы, а не для тех. стэка.
5️⃣Использование глобального .gitignore
Зачем? Чтобы не закинуть в git вещи специфичные для вашего окружения.
Сохраните вещи из 4️⃣ в ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_globalХорошая практика держать там .env файл
Из комментариев:
Начинающему техлиду стоит использовать .gitattributes для выставления конца строки на уровне репозитория с помощью core.autocrlf. Тогда джуны сидящие на Windows не буду страдать.
👍1
Как просто улучшить работу с git?
#git #cli
TL;DR установите git-extras
Я предпочитаю работать с git через командную строку, а не в IDE. Одна из причин прокачка git с помощью external commands, о которых я уже писал. Лучшим набором таких команд является git-extras.
Мои наиболее часто используемые команды:
Начать использовать можно тут.
Рецепты по теме:
- Как автоматизировать работу с git?
- На что влияет environment variable EDITOR?
- Как и что настроить в git?
#git #cli
TL;DR установите git-extras
Я предпочитаю работать с git через командную строку, а не в IDE. Одна из причин прокачка git с помощью external commands, о которых я уже писал. Лучшим набором таких команд является git-extras.
Мои наиболее часто используемые команды:
git undo – отмена последнего коммитаgit undo N – отмена последних N коммитовgit abort – отмена текущего rebase, merge или cherry-pick.git browse – аналог вышеназванного git open. Откроет в браузере страницу репозитория (github, gitlab).git effort --above 5 – узнать какие файлы менялись больше чем в 5 коммитах. Удобно при анализе нового проектаНачать использовать можно тут.
Рецепты по теме:
- Как автоматизировать работу с git?
- На что влияет environment variable EDITOR?
- Как и что настроить в git?
👍32