JavaScript — это язык программирования, используемый в основном веб-браузерами для создания динамичного и интерактивного взаимодействия с пользователем. Большинство функций и приложений, которые делают Интернет незаменимым в современной жизни, написаны на языке JavaScript.

Хотя JavaScript является интерпретируемым языком и его не нужно компилировать, его можно запускать только внутри браузера. Браузеры имеют встроенный движок JavaScript, например, Chrome имеет движок V8, а Microsoft Explorer имеет Chakra, который компилирует код в собственный машинный код перед его выполнением для повышения производительности.

Для запуска JavaScript вне браузера Node.js был впервые написан Райаном Далем в 2009. Nodejs использует движок V8 браузера Chrome для запуска JavaScript. Он предоставляет среду выполнения для запуска программ JS без их запуска в браузере.

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

Node.js — это асинхронная управляемая событиями среда выполнения JavaScript (не фреймворк). Это позволяет нам запускать JavaScript из браузера. Node.js состоит из движка V8, который помогает запускать JavaScript в среде выполнения. Он использует асинхронный режим работы, управляемый событиями ввод/вывод вместо использования традиционных потоков или отдельных потоков для каждого процесса.

Функции Node.js

  1. Асинхронный и управляемый событиями – все API библиотеки Node.js являются асинхронными, то есть неблокирующими. По сути, это означает, что сервер на базе Node.js никогда не ждет, пока API вернет данные. Сервер переходит к следующему API после его вызова, а механизм уведомления о событиях Node.js помогает серверу получить ответ от предыдущего вызова API.
  2. Очень быстро. Библиотека Node.js, построенная на базе JavaScript Engine Google Chrome V8, очень быстро выполняет код.
  3. Однопоточный, но с высокой масштабируемостью – Node.js использует однопоточную модель с циклом событий. Механизм событий помогает серверу реагировать неблокирующим образом и обеспечивает высокую масштабируемость сервера в отличие от традиционных серверов, которые создают ограниченные потоки для обработки запросов. Node.js использует однопоточную программу, и одна и та же программа может обслуживать гораздо большее количество запросов, чем традиционные серверы, такие как HTTP-сервер Apache.
  4. Без буферизации – приложения Node.js никогда не буферизуют данные. Эти приложения просто выводят данные порциями.
  5. Кроссплатформенная совместимость. NodeJS можно использовать в различных системах, включая Windows, Unix, Linux, Mac OS X и мобильные устройства. Его можно объединить с соответствующим пакетом для создания самодостаточного исполняемого файла.

Что включает в себя Node.js?

Node.js Api состоит из некоторых основных функций Node.js, таких как https, fs (файловая система), шифрование или путь. Эти функции сложны и не обрабатываются движком V8, поэтому движок V8 использует эту библиотеку API node.js.

Некоторые функции в API node.js написаны на языках низкого уровня, таких как C или C++, которые понятны системе, поэтому используется библиотека привязок node.js, разработанная на C/C++. Эта библиотека помогает выполнять функции, написанные на C/C++ в API node.js.

Наряду с движком V8 Node.js имеет еще один важный компонент под названием Libuv.

Libuv занимается задачами ввода и вывода. Он написан на C, и эта библиотека сообщает node.js назначать задачи операционной системе. Когда node.js делегирует задачи ОС, он не ждет ответа. Он позволяет ОС завершить обработку и начинает работать над какой-то другой функцией, но как только она завершает ее, node.js получает от нее ответ. Он абстрагирует способы выполнения действий в различных ОС, таких как macOS, Windows и Linux, и передает их API-интерфейсу узла для завершения задачи. Этот процесс называется асинхронным вводом/выводом.

Это библиотека, написанная на языке C, которая отвечает за асинхронный ввод и вывод. Он выполняет такие функции, как файловая система и сеть. Мы можем запускать асинхронную функцию с помощью Цикла событий.

Цикл событий — это код в Libuv, который запускает асинхронную функцию и выполняет соответствующий обратный вызов, когда результат функции готов. Функция, подобная файловой системе, выполняется в пуле потоков. Хотя функции, использующие сеть, работают непосредственно в операционной системе.

Пул потоков — это совокупность нескольких потоков внутри Libuv. Он имеет ограниченный набор доступных потоков, которые можно использовать повторно. Если пул потоков использовал все потоки в пуле потоков, следующая функция должна дождаться, пока какой-либо поток не будет выполнен и готов к повторному использованию.

Но не каждый асинхронный код выполняется в пуле потоков. Node.js на самом деле старается избегать использования пула потоков, поскольку они более сложны, имеют ограниченные ресурсы и в пуле потоков выполняются только некоторые операции. Вместо этого, где это возможно, Libuv напрямую использует операционную систему, в частности ядро ​​ОС.

Это помогает сэкономить, используя ограниченные ресурсы пула потоков. И когда функция выполняется в ОС, цикл событий получает от нее сигнал и выполняет функцию обратного вызова.

Поэтому Nodejs работает быстро, даже если он однопоточный.