073 Eslint и prettier
Установим prettier
и eslint
вместе с плагинами, парсерами и конфигами
- одиночные кавычки
- висячая
,
- использование табов
;
в конце- пробелы между фигурными скобочками
- максимальная длина
- конечная строка: автоматически
.prettierrc
no-unused-vars
- не используемые переменные (включая функции и объекты) - отключено у насexplicit-function-return-type
- нужно явно указывать, что возвращает функцияno-explicit-any
- запрещает использоватьany
- убираем эту настройку
.eslintrc
Если мы будем работать в VSCode, то нужно будет сохранить эти настройки. Тут мы устанавливаем в качестве форматтиера eslint
и форматирование будет происходить при сохранении
.vscode > settings.json
Далее нам нужно добавить эти два скрипта линтера, чтобы он форматировал все файлы в проекте
Далее нам нужно будет протипизировать возвраты функции
Так же нужно будет проставить все невозвратные функции void
Тут уже, так как функция асинхронная async
, то она возвращает Promise<void>
074 Подключение nodemon
ts-node
- это плагин, который позволяет запускать приложения непосредственно на TS (компиляция происходит уже под капотом)
nodemon
- это плагин, который будет перезагружать node-приложение после каждого сохранения изменений (работает почти как webpack, но на стороне сайта)
watch
- это та папка, за которой будет следить мониторext
- это расширения, за изменениями которых будет следить плагинignore
- указывает на то, что нужно игнорировать при перезапускеexec
- путь до нашего основного файла приложения (а именно для его запуска)
nodemon.json
Так же данная строка в скриптах будет запускать сам монитор нод-приложения:
package.json
И теперь при каждом изменении одного из файлов проекта будет перезагружаться наш сервер
075 Отладка
Первым делом, чтобы нормально отлаживать приложение, нужно в конфиге ТСа добавить компиляцию карт, чтобы отладчик понимал, к какой части приложения он сейчас обращается
tsconfig.json
Далее, если мы работаем в VSCode, то нужно указать данные настройки для отладчика
.vscode > launch.json
Во вкладке отладки после настроек должен находиться наш nodemon
Далее нам нужно поставить точку останова в нужное место приложения и запустить приложение через команду npm run dev
. После этих приготовлений, мы наконец-то сможем отправить запрос на сервер, что и триггернёт дебаггер на работу
076 Анализ памяти
-e
- экстеншены, которые мы хотим запускать--exec
- наш файл запуска--inspect
- подключает наш отладчик к определённому хосту-r
- подключает дополнительный обработчик
package.json
Далее переходим в хроме по ссылке в about:inspect
и там настраиваем наше подключение
Дальше мы можем перейти во вкладку Memory, где мы можем посмотреть, сколько памяти съедает наше приложение и сделать снэпшот того, какие компоненты и сколько съедают
В самом снэпшоте можно просмотреть дерево компонентов и сколько они в отдельности съедают памяти
Далее у нас идёт профилировщик. В нём мы конкретно можем посмотреть, что происходит во время запросов на сервер. Сначала нужно запустить профилировщик, затем отправить запросы на сервер и уже потом остановить профилировщик, чтобы просмотреть подробно, какие данные и в каком промежутке отправлялись
Тут мы можем увидеть flame graph с блоками выполняемых задач. Чем длиннее будет блок, тем больше времени тратится на его выполнение. Длинные блоки стоит оптимизировать .
077 Мониторинг производительности
Далее идёт удобный инструмент, который позволит нам мониторить наше приложение, его потребляемые ресурсы и производительность
Первым делом нужно установить саму клинику. Так же в пару с ней модуль имитации нагрузки на систему.
clinic
- вызываем пакетdoctor
- определяем какой именно инструмент будем использовать--on-port
- определяем настройкиautocannon
- через модуль нагрузки-m
- метод запросаPOST
- отправка сообщения на серверlocalhost...
- куда будем стучаться- Дальше нужно вызвать нодовскую команду, которая запустит конечное приложение
После запуска инструмента сформируется папка .clinic
с отчётом о производительности системы. Конкретно тут показан хороший график.
Далее немного нагрузим систему тяжёлым запросом, который будет сохранять в массив прочтённый файл видео
И попробуем выполнить запрос. Тут мы уже получили плохой график, который явно указывает на огромный рост длительности выполнения ивент лупа.