Node.js
Сергей Олиферчик
Что такое Node JS ?
-
Open Source JavaScript-движок V8
-
Библиотека libuv
-
Встроенное API
Встроенное API

- Цикл событий (event Loop)
- Асинхронные операции ввода / вывода


Event loop

-
timers: коллбэки, запланированные методами setTimeout() и setInterval();
-
pending callbacks: выполняются все коллбэки, кроме событий close, таймеров и setImmediate();
-
idle, prepare: используется только для внутренних целей;
-
poll: ответственен за получение новых событий ввода / вывода.
-
check: коллбэки, вызванные методом setImmediate();
-
close callbacks: например, socket.on('close', ...);
Node.js использует неблокирующие ввод /вывод операции, что же это значит:
- Главный поток не будет блокироваться операциями ввода / вывода.
- Сервер будет продолжать обслуживать запросы.
- Нам придётся работать с асинхронным кодом.
С высоты птичьего полёта

Немного истории
Многопоточный сервер
Для обработки N запросов серверу нужно N потоков. Если сервер получает N+1 запросов, тогда он должен ждать пока один из потоков не станет доступным.

Вам стало интересно почему один поток не может обрабатывать несколько запросов одновременно ?
всё из-за блокирующих операций ввода / вывода.
Допустим, Вы разрабатываете онлайн магазин и Вам нужна страница где пользователь может просматривать список всех товаров.
Пользователь стучится на http://yourstore.com/products и сервер рендерит HTML файл со всеми продуктами с базы данных в ответ.
Совсем не сложно, да ?
- Обработка URL-адрес; Поток работает
- Нужный метод или функция выполняется; Поток работает
-
Cохранение системные логи в файл; Поток ждёт
-
Логи сохранены и следующие функции выполняются; Поток работает
-
Время обращаться к базе данных и получать все продукты; Поток ждёт
-
Движок рендеринга делает свою работу и шлёт ответ клиенту. Поток работает снова
Давайте заглянем за кулисы
На сколько медленны
операции ввода / вывода?



VS
Начало работы с Node JS
Для установки какой-либо версии Node.js лучше всего использовать NVM, так как он позволяет быстро переключаться между различными версиями Node.js, если это необходимо.
NVM основные команды
- nvm list
- nvm install {{version}}
- nvm use {{version}}
- nvm alias default {{version}}
Релизы Node JS
|
|
||||||
|---|---|---|---|---|---|---|
| Release | Status | Codename | Initial Release | Active LTS Start | Maintenance LTS Start | End-of-life |
| v10 | Maintenance LTS | Dubnium | 2018-04-24 | 2018-10-30 | 2020-05-19 | 2021-04-30 |
| v12 | Active LTS | Erbium | 2019-04-23 | 2019-10-21 | 2020-10-20 | 2022-04-30 |
| v14 | Current | 2020-04-21 | 2020-10-20 | 2021-10-19 | 2023-04-30 | |
| v15 | Pending | 2020-10-21 | 2021-04-01 | 2021-06-01 |

Менеджер пакетов
Основные команды:
-
npm init
-
npm install/uninstall (с различными флагами, например --save-dev, -g)
-
npm audit fix
-
npm publish/unpublish
Пару слов про NMP
-
Более 800 тыс. пакетов
-
Библиотека left-pad
-
Конфликты версий
-
Заражение и audit
-
Большой размер node_modules


Запуск Node JS: node file_name.js
Флаги запуска:
- --inspect
- --max-old-space-size=3000
- --stack-trace-limit=1000
- ...
От JavaScript никуда не деться
" Всё что может быть написано на JavaScript, должно быть написана на нём "
"Any application that can be written in JavaScript, will eventually be written in JavaScript"
Jeff Atwood
основатель Stack Overflow
Часто применяется для:
- серверы веб-приложений и SPA
- серверы мобильных приложений
- системы сборки для фронт-энда
- чаты, меседжинг
- игровые сервера
Реже применяется для:
- оконые приложения: NW.js (node-webkit), Electron
- приложения баз данных
- промышленная автоматизация и программирование микроконтроллеров (arduino, tessel)
Редко применяется:
- CMS, публикация контента
- электронная коммерция и торговля
И плохо подходит:
-
вычисление и моделирование
-
научные приложения
10 - Node.js
By Startup Summer
10 - Node.js
- 150