Как я чувствую твою боль!
Как и многим, мне было трудно добраться до сути Node.js, потому что большинство людей пишут / говорят только о той части Node, которую они считают полезной, а та часть, которую они считают интересной, обычно является вторичным преимуществом Node, а не его основным. цель. Должен сказать, что я считаю безумием говорить, что Node - это просто среда выполнения JavaScript. Использование JavaScript в Node и выбор среды выполнения V8 - это просто средство для решения проблемы, лучшие инструменты для решения проблемы, которую разработчики Node хотели решить.
Основная цель Node - сделать управление пользовательскими событиями в веб-приложении более эффективным. Итак, Node в подавляющем большинствеиспользуется в серверной части веб-приложения. Управление событиями требует, чтобы что-то на сервере прослушивало эти пользовательские события. Поэтому необходимо настроить http-сервер для маршрутизации каждого события в соответствующий сценарий обработчика. Node предоставляет основу для быстрой настройки сервера для прослушивания выделенного порта для запросов пользователей. Node использует JavaScript для обработки событий, потому что JavaScript имеет функции обратного вызова: это позволяет приостановить выполнение одной задачи до тех пор, пока не будет возвращен результат зависимой задачи. Не многие другие языки имеют эту функцию, а те, которые имеют, могут не иметь такого эффективного интерпретатора, как среда выполнения Google V8. Большинство веб-разработчиков знают JavaScript, поэтому нет необходимости в дополнительном изучении языка с помощью Node. Более того, наличие функций обратного вызова позволяет помещать все пользовательские задачи в один поток.без явной блокировки задач, требующих доступа к базе данных или файловой системе. И это то, что приводит к превосходной эффективности выполнения Node при интенсивном одновременном использовании - основной цели его разработки.
Чтобы помочь пользователям Node быстро писать внутренний код, разработчики Node также организовали как встроенную библиотеку JS для рутинных задач (например, вопросы, связанные с HTTP-запросами, строковое (де) кодирование, потоки и т. Д.), Так и репозиторий NPM (Node Package Manager). : это поддерживаемый пользователем набор пакетов сценариев с открытым исходным кодом для различных стандартных и пользовательских функций. Все проекты Node позволяют импортировать пакеты NPM в проект с помощью установленной команды npm install .
Пользовательские запросы, обрабатываемые через Node, будут такими вещами, которые необходимы веб-приложению, например аутентификацией, запросами к базе данных, управлением контентом (Strapi CMS) и т. Д. Все это будет отправлено на порт Node. (Там, где анализ данных, полученных из базы данных, занимает много времени ЦП, этот тип процесса лучше всего поместить в отдельный поток, чтобы он не замедлял выполнение более простых пользовательских запросов.) Другие типы пользовательских запросов, например, для загрузки другой веб-страницы. , загрузка файлов CSS / JS / изображений и т. д., браузер продолжит отправлять их на порт (ы) по умолчанию на сервере, где программа веб-сервера (Apache, NGinx и т. д.) будет их обрабатывать.
Итак, на практике Node - это в основном платформа для быстрого создания сервера и обработки событий, но она заменяет только некоторые функции программы веб-сервера.
Другие способы использования Node, не связанные с серверной частью, просто используют ту или иную его функцию, например, двигатель V8. Например, инструменты сборки интерфейса Grunt и Gulp используют Node.js для обработки сценария сборки, который можно закодировать для преобразования SASS в CSS, минимизации файлов CSS / JS, оптимизации размера / загрузки изображения и т. Д. Но такая работа действительно просто побочный продукт использования Node, а не его основное использование, которое заключается в создании эффективных внутренних процессов для веб-приложений.