Что такое Node.js? Это среда? Это время выполнения? Это язык, что это такое? Это все те вещи. По сути, это среда для запуска JavaScript вне браузера. Он был создан Райаном Далем в 2009 году. Это среда выполнения с открытым исходным кодом, и когда я говорю «среда выполнения», я имею в виду исполняемый файл. Это хост-среда для запуска кода JavaScript на стороне сервера.

Итак, если мы пишем код на bash, мы находимся в среде выполнения bash. Если мы пишем код на Ruby, мы находимся в среде выполнения Ruby. Это похоже на собственную среду выполнения, это собственная самоинкапсулированная среда. Он построен на Chrome’s V8 JavaScript engine.

Если вы не знаете, что такое движок V8 в Chrome, почти в каждом браузере есть собственный движок JavaScript, который анализирует и запускает JavaScript. Движок Chrome называется V8, и это просто их компилятор, который они используют для компиляции JavaScript в машинный код, чтобы реальная машина могла его прочитать. V8 был одним из лучших. Создатель Node решил вынуть его из Chrome, вырвать и положить в другое место. Вот почему мы можем писать Node.js на JavaScript, потому что он построен на том же движке.

Архитектура Node.js

Node.js использует архитектуру Single Threaded Event Loop для обработки нескольких одновременных клиентов. Модель обработки узла основана на JavaScript event-based model вместе с JavaScript callback mechanism.

У этой архитектуры есть несколько преимуществ.

  1. Благодаря использованию Event Queue and Thread Pool сервер Node.js позволяет эффективно обрабатывать большое количество входящих запросов.
  2. Цикл обработки событий обрабатывает все запросы поочередно, поэтому нет необходимости создавать несколько потоков. Вместо этого для обработки блокирующего входящего запроса достаточно одного потока.
  3. Сервер Node.js в большинстве случаев требует меньше ресурсов и памяти из-за того, как он обрабатывает входящие запросы. Поскольку запросы обрабатываются по одному, общий процесс становится менее загруженным в память.

Браузер против узла

Как я уже сказал, они оба - JavaScript. Chrome использует V8, Node использует V8, но есть некоторые различия, такие как технологии, возможности и образ мышления. Итак, давайте поговорим об этом образе мышления.

Для браузеров - для создания интерактивных приложений для Интернета. Визуальные вещи, которые люди видят, нажимают и с которыми взаимодействуют. Узел не для этого, нет визуальной графики. Здесь нет ничего визуального, у нас есть терминал, вот и все. Мы можем думать о Node буквально как о чистой логике. Нет ни UI, ни CSS. Нет никаких анимаций, это чистая логика.

В браузере есть глобальный объект window для кода JavaScript. В Node нет окна, но есть смысл global object. Итак, давайте поговорим о глобальных объектах.

По сути, Node предоставляет нам полезные глобальные переменные. Мы собираемся поговорить о некоторых из них, их много, но это одни из самых важных.

Один называется process. Он включает информацию о машине, количестве ядер, ее имени, путях и местоположениях, переменных среды. Всевозможные вещи, которые может иметь этот процесс. И это будет меняться в зависимости от того, на какой машине запущено ваше приложение.

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

Это версия импорта JavaScript, она просто называется require. Или я должен сказать, что это версия импорта Node, которая называется require.

Модули в Node.js

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

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