Что такое Node.js?

chto takoe nodejs

Node.js – это среда выполнения JavaScript. Звучит отлично, но что это значит? Как это работает?

Среда выполнения Node.js содержит все необходимое для выполнения программы, написанной на JavaScript.

1_sYPllpcAZLHmpuQSRPuO0Q
Если вы знаете Java, вот небольшая аналогия.

Node.js появился, когда начальные разработчики JavaScript расширили его с того, что вы могли запускать только в браузере, до того, что вы могли запускать на своей машине как отдельную программу.

Теперь вы можете сделать гораздо больше с помощью JavaScript, чем просто делать веб-сайты интерактивными.

JavaScript теперь может делать то, что могут делать другие языки сценариев, такие как Python.

И JavaScript, и Node.js в вашем браузере работают на механизме исполнения JavaScript V8. Этот механизм берет ваш код JavaScript и превращает его в более быстрый машинный код. Машинный код — это код низкого уровня, который может запускать компьютер без необходимости его предварительной интерпретации.

Почему Node.js?

Вот официальное определение, представленное на официальном веб-сайте Node.js:

Node.js® – это среда выполнения JavaScript, созданная на движке JavaScript V8 Chrome.

Node.js использует неблокирующую модель ввода-вывода, управляемую событиями, что делает его легким и эффективным.

Экосистема пакетов Node.js, npm, является самой большой экосистемой библиотек с открытым кодом в мире.

Мы уже обсуждали первую строчку этого определения: «Node.js® – это среда выполнения JavaScript, созданная на движке JavaScript V8 Chrome». Теперь давайте разберемся с другими двумя строками, чтобы мы могли узнать, почему Node.js так популярен.

I/O касается ввода/вывода. Это может быть что угодно, начиная от чтения/записи локальных файлов и заканчивая HTTP-запросом к API.

Ввод/вывод занимает время и, следовательно, блокирует другие функции.

Рассмотрим сценарий, когда мы спрашиваем серверную базу данных для деталей пользователей1 и пользователя2, а затем печатаем их на экране/консоли. Ответ на этот запрос требует времени, но оба запроса пользовательских данных могут выполняться независимо и одновременно.

1*B_UCsFOPfRDKO8ovHpxphg
Блокировка ввода-вывода (слева) против неблокирующего ввода-вывода (справа)

Блокировка ввода/вывода

В методе блокировки запрос пользовательских данных2 не инициируется, пока данные пользователя1 не будут напечатаны на экране.

Будь это веб-сервер, нам пришлось бы запускать новый поток для каждого нового пользователя. Но JavaScript однопоточный (на самом деле не так, но он имеет однопоточный цикл событий, о котором мы поговорим чуть позже). Поэтому это сделало JavaScript не очень пригодным для многотекущих задач.

Вот где возникает неблокирующая часть.

Неблокирующий ввод-вывод

С другой стороны, используя неблокирующий запрос, вы можете инициировать запрос данных для пользователя2, не дожидаясь ответа на запрос пользователя1. Вы можете инициировать оба запроса параллельно.

Этот неблокирующий ввод-вывод устраняет потребность в многопоточности, поскольку сервер может обрабатывать несколько запросов одновременно.

Цикл событий JavaScript

Если у вас есть 26 минут, посмотрите это замечательное видео с объяснением цикла событий Node:

В противном случае, вот краткое пошаговое объяснение того, как работает цикл событий JavaScript.

1*BBlPbUjGVtfSPd7BHa1LHw
Авторство изображения: курс Эндрю Мида
  1. Толчок main() на стек вызовов.
  2. Толчок console.log() на стек вызовов. Затем это запускается сразу и вырывается.
  3. Толчок setTimeout(2000) на стек. setTimeout(2000) есть API узла. Когда мы вызываем его, мы регистрируем пару событие-обратный вызов. Событие будет ждать 2000 миллисекунд, а затем последует функция обратного вызова.
  4. После регистрации в API, setTimeout(2000) вырывается из стека вызовов.
  5. Теперь второй setTimeout(0) регистрируется таким же образом. Теперь у нас есть два API Node, которые ожидают выполнения.
  6. После ожидания 0 секунд, setTimeout(0) перемещается в очередь обратного вызова, и то же происходит с setTimeout(2000).
  7. В очереди обратного вызова функции ждут, пока стек вызовов будет пустым, потому что только один оператор может выполнить время. Об этом заботится цикл событий.
  8. Последний console.log() бежит, и main() вырывается из стека вызовов.
  9. Цикл событий видит, что стек вызовов пуст и очередь обратных вызовов не пуста. Таким образом, он перемещает обратные вызовы (в порядке «первый пришел – первый вышел») в стек вызовов для выполнения.

npm

0*A47ZVKudfCOCBbyx

Это библиотеки, созданные великолепным сообществом, которые решат большинство ваших общих проблем. npm (Node package manager) имеет пакеты, которые можно использовать в своих приложениях, чтобы сделать вашу разработку более быстрой и эффективной.

Требовать

Require делает три вещи:

  • Он загружает модули, поставляемые в комплекте с Node.js, например файловую систему и HTTP, с API Node.js.
  • Он скачивает посторонние библиотеки, такие как Express и Mongoose, которые вы устанавливаете с npm.
  • Это позволяет потребовать собственные файлы и модулировать проект.

Require — это функция, принимающая параметр «путь» и возвращающая module.exports.

Модули узлов

Модуль Node – это многократный блок кода, существование которого случайно не влияет на другой код.

Вы можете писать собственные модули и использовать их в разных приложениях. Node.js имеет набор встроенных модулей, которые можно использовать без дополнительной инсталляции.

V8 турбо заряжает JavaScript, используя C++

V8 — механизм выполнения с открытым кодом, написанный на языке C++.

JavaScript -> V8(C++) -> Машинный код

V8 реализует сценарий под названием ECMAScript, как указано в ECMA-262. ECMAScript создан Ecma International для стандартизации JavaScript.

V8 может работать автономно или может быть встроен в любое приложение C++. У него есть хуки, которые позволяют вам писать свой собственный код C++, который вы можете сделать доступным для JavaScript.

Это, по сути, позволяет добавлять функции в JavaScript путем встраивания V8 в код C++, чтобы ваш код C++ понимал больше, чем то, что указывает стандарт ECMAScript.

Редактировать: как обратил мое внимание Грег Булмаш, кроме V8 от Chrome существует много различных механизмов исполнения JavaScript, например, SpiderMonkey от Mozilla, Chakra от Microsoft и т.д. Подробности о том же можно найти на этой странице.

События

Что-то случилось в нашем приложении, на что мы можем отреагировать. У Node есть два типа событий.

  • Системные события: ядро ​​C++ из библиотеки libuv. (Например, кончил читать файл).
  • Специальные события: ядро ​​JavaScript.

Написание Hello World в Node.js

Мы должны это сделать, не правда ли?

Создайте файл app.js и добавьте в него следующее.

console.log("Hello World!");

Откройте терминал узла, измените каталог на папку, где сохранен файл, и запустите node app.js.

Бам – вы только что написали Hello World в Node.js.

Подпишитесь на @Priyesh_p18

Существует масса ресурсов, которыми вы можете воспользоваться, чтобы узнать больше о Node.js, включая freeCodeCamp.org.

Добавить комментарий

Ваш адрес email не будет опубликован.