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

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

Node.js - это платформа, построенная на среде выполнения Javascript Chrome для создания быстрых и масштабируемых сетевых приложений.

Node.js НЕ является фреймворком. Существуют веб-фреймворки, такие как Express, которые основаны на Node.js.

Почему именно Node.js?

  • Очень быстро
  • Асинхронный и управляемый событиями
  • Однопоточный, но хорошо масштабируемый
  • Без буферизации

Почему Node.js работает быстро?

Скорость Node.js в основном зависит от двух вещей: движка V8 и его неблокирующей функции.

Двигатель V8:

Node.js использует сверхбыстрый механизм выполнения V8 Google Chrome. До выпуска Chrome большинство браузеров читали JavaScript неэффективно: код читался и интерпретировался бит за битом. Потребовалось много времени, чтобы прочитать JavaScript и преобразовать его в машинный язык, чтобы его мог понять процессор.

Движок Google Chrome V8 работает совершенно иначе. Он хорошо оптимизирован и выполняет то, что мы называем JIT (Just In Time) компиляцией. Он быстро преобразует код JavaScript в машинный язык. Нам не нужно знать, как работает V8, чтобы использовать Node.js. Просто помните, что это делает выполнение JavaScript очень быстрым.

Неблокирующая модель

Поскольку JavaScript - это язык, построенный на идее событий, Node.js позволяет использовать алгоритм полностью неблокирующего кода. Кстати, знаем ли мы разницу между блокирующим кодом и неблокирующим кодом? Хммм, возможно, требуется небольшое объяснение!

Блокирующая модель и неблокирующая модель

Представьте себе программу, которая создана для загрузки файла и последующего его отображения. Вот как пишется код на языках последовательного программирования (модель блокировки):

Загрузите файл
Отобразите файл
Сделайте что-нибудь еще

Действия выполняются по порядку. Строки нужно читать сверху вниз:

  1. Программа загрузит файл в Интернет.
  2. Программа отобразит файл пользователю.
  3. Затем программа может делать другие вещи (т. Е. Выполнять другие действия).

Теперь мы можем написать тот же код в неблокирующей модели:

Загрузить файл
Как только он будет готов, отобразите файл

Сделай что-нибудь еще

Программа больше не выполняет задачи в том порядке, в котором они написаны. Это делает это:

  1. Программа запускает загрузку файла в Интернет.
  2. Программа выполняет другие функции (программа следует своему курсу).
  3. Как только загрузка завершена, программа выполняет действия, которые мы ее просили: она отображает файл.

Неблокирующая модель в программировании

Именно так работает Node.js. Как только появляется сообщение «Файл загружен», вызывается функция, известная как функция обратного вызова, которая выполняет действия (здесь функция обратного вызова отображает файл).

В неблокирующей модели (например, Node.js) 2 файла загружаются одновременно, и все завершается быстрее.

Почему это масштабируемое?

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

Довольно интересно, как это работает под капотом. По сравнению с традиционными методами веб-обслуживания, когда каждое соединение (запрос) порождает новый поток, занимая системную оперативную память и, в конечном итоге, достигая максимального объема доступной оперативной памяти, Node.js работает в однопоточном режиме, используя неблокирующий ввод / вывод. O, позволяя поддерживать десятки тысяч одновременных соединений (удерживаемых в цикле событий).

Быстрый расчет: если предположить, что каждый поток потенциально имеет сопровождающие 2 МБ памяти, работа в системе с 8 ГБ ОЗУ дает теоретический максимум 4000 одновременных подключений (расчеты взяты из статьи Майкла Абернети Просто что такое Node.js? , опубликованная на IBM developerWorks в 2011 г., к сожалению, статья больше не доступна), плюс стоимость переключения контекста между потоками . Это сценарий, с которым вы обычно сталкиваетесь при использовании традиционных методов веб-обслуживания. Избегая всего этого, Node.js достигает уровней масштабируемости более 1 миллиона одновременных подключений и более 600 тысяч одновременных подключений к веб-узлам.

Где использовать Node.js?

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

Почему node.js не подходит для приложений, требующих большего количества вычислений?

Аналогия:

Думайте о веб-приложении как о ресторане. У вас есть официанты (веб-сервер) и повара (рабочие). Официанты находятся в контакте с клиентами и выполняют простые задачи, например, предоставляют меню или объясняют, является ли какое-то блюдо вегетарианским. С другой стороны, они перекладывают более сложные задачи на кухню. Поскольку официанты делают только простые вещи, они быстро реагируют, и повара могут сосредоточиться на своей работе.

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

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

Почему вам следует выбрать node.js?
Nodejs - это в основном серверный JavaScript. Работа с Nodejs - это гораздо меньше переключателя контекста для разработчика, который также работает с JS во внешнем интерфейсе. Если у вас есть сервер Nodejs, гораздо проще начать работу и даже получить опыт в качестве разработчика полного стека. Поскольку его JavaScript также находится в бэкэнде, существует много единообразия с точки зрения формата данных - JSON! Более общие вещи в передней и задней части тоже. Если есть какие-то общие функции, которые необходимы как во фронтенд, так и в бэкенде, вы можете записать их в общий файл и просто «потребовать» их. Если вы используете разные языки во фронтенде и бэкэнде, найдутся места, где вы будете должны повторять функции для внешнего и внутреннего интерфейса.

Еще один аргумент в пользу Node.js - его глубокая дружба с MongoDB. Опять же, протокол для связи здесь - JSON, поэтому при обработке данных очень мало накладных расходов.

Я упоминал, что это JavaScript? Вы пропустили библиотеку подчеркивания при написании серверного кода? Что ж, теперь вы получаете все преимущества, которые вселенная JavaScript может предложить и в бэкэнде. Это может помочь вам создать надежный и многофункциональный сервер за очень короткое время.

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

Онлайн-руководства

Экспресс:

Https://codeforgeek.com/2014/06/express-nodejs-tutorial/

Mongo DB:

Https://codeforgeek.com/2015/08/restful-api-node-mongodb/

CRUD в node.js

Https://medium.freecodecamp.org/building-a-simple-node-js-api-in-under-30-minutes-a07ea9e390d2

Источники:





Https://stackoverflow.com/questions/3491811/node-js-and-cpu-intensive-requests/3491931#3491931