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

Флаги запуска:

От 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