Перейти к основному контенту

Что такое Node.js

Node.js

Node.js ― это восходящая звезда в сфере программирования. В этой статье мы расскажем, что такое Node.js и какие особенности она имеет.

Node.js ― это не отдельный язык программирования, а среда для выполнения JavaScript. Или, другими словами, платформа для работы с JavaScript на стороне сервера. Кроме названия «Node.js», можно встретить сленговое имя ― Node (нода). Платформу создал Райан Дал, а спонсором разработки выступила компания Joyent. Среда была представлена в 2009 году.

Раньше JavaScript мог выполнять только браузер. С помощью Node.js это можно делать без него. На данный момент эту технологию для своего бэкенда используют PayPal, eBay, Amazon и Netflix.

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

Node.js основана на движке V8. V8 ― это программа, которая преобразует JavaScript в машинный код, то есть код понятный процессору. Этот же движок используется в основе браузера Google Chrome. Одного V8 для удобной работы мало, так как он может работать только с JavaScript. Он не умеет читать файлы, не может работать с сетью вне браузера, поэтому Райан Дал вместе с разработчиками с помощью дополнительных библиотек и кода добавили дополнительные возможности к V8. Это позволило сделать из JavaScript веб-сервер.

Плюсы Node.js:

  • Использование одного языка JavaScript как на клиентской стороне в браузере, так и на сервере.
  • NPM (Node Package Manager) ― это менеджер пакетов, или набор готовых модулей. Это своеобразный склад, где программисты делятся своим кодом. Комьюнити очень большое, поэтому в NPM на данный момент собрано огромное количество решений для разных задач.
  • Увеличение скорости работы. Node.js ― это однопоточная и асинхронная система. Вы можете читать файлы, отправлять электронные письма, запрашивать данные и совершать другие действия одновременно. Подробнее об однопоточной работе мы расскажем ниже.

Node.js основы: что такое многопоточная и однопоточная работа

При изучении серверных процессов нужно знать, что есть 2 схемы работы с сервером ― многопоточная и однопоточная.

Работа с веб-приложением ― это передача запроса и получение ответа от сервера. Многопоточная система линейна. Вначале выполняется один запрос, затем другой и так далее по очереди. Например, нам нужно обратиться к базе данных. Веб-сервер делает запрос и ждёт, пока не придёт ответ. Как только ответ вернулся, он обрабатывает его и может приступить к отправке других запросов. Как видите, в процессе ожидания веб-сервер тратит ресурсы, но ничего не делает.

При выполнении запроса потребляются ресурсы сервера: память, процессорное время и количество ядер. Получается, при многопоточном подходе сервер может выполнить только один запрос за раз? Нет. Каждый запрос помещается в отдельный поток. Поток ― это время и ресурсы, которые выделяет сервер для выполнения небольшого блока инструкций. Таким образом, количество потоков зависит от мощности машины. Чем больше ресурсов, тем больше потоков и тем больше запросов может выполнить сервер одновременно. Такая модель работы называется thread-per-request model (модель потока на запрос).

Многопоточная система Многопоточная система

Если свободные потоки заканчиваются, сервер не может выполнить задачу. Она попадает в очередь и ждёт, пока не освободиться один из потоков. Например, вам нужно выполнить 3 запроса. Вам доступно 4 потока. Мощность сервера позволяет вам выполнить их все за раз. Если вам нужно будет выполнить 5 запросов, то одна задача не поместится и ей придётся ждать свободного потока. Из-за нескольких потоков, которые обрабатывают запросы, система и получила название многоканальная.

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

Однопоточная система Node.js для начинающих. Однопоточная система

Отличным примером является загрузка страницы сайта. Представьте, вы хотите загрузить страницу сайта. Веб-ресурс может показаться пользователю, как только браузер получит весь необходимый контент. При использовании обычного веб-сервера с многопоточной системой каждый файл (картинка, название, основной текст, фон) будет запрашиваться по отдельности. Например, сначала фон, затем, как только данные фона будут получены, веб-сервер отправит запрос на картинки и так далее. Из-за долгого ожидания ответа страница будет грузиться дольше. Как мы уже говорили Node.js не тратит время на ожидание. Во время поиска фоновой картинки нода запросит другую картинку. За счёт этого сайт загрузится быстрее.

Node.js модули

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

Модуль можно подключить с помощью функции require(). В скобках нужно указать путь к файлу. Набор модулей уже обширен. Например, вы можете использовать модуль Node.js PostgreSQL для взаимодействия с базой данных.

Подробнее о встроенных модулях и их функциональности можно узнать в официальной документации.

Node.js: как пользоваться

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

Платформа хорошо подходит для разработки RTA — веб-приложений, которые реагируют на действия пользователя в режиме реального времени. Например, это может быть онлайн-редактор типа Google Docs, который позволяет работать над одним документом нескольким пользователям одновременно.

Node.js, PHP или Python?

Node.js не такой популярный как PHP. На PHP написаны такие CMS как WordPress, Joomla!, Drupal. И именно на этих системах управления работает большинство сайтов.

Фреймворков для PHP пока больше, чем для Node.js. Инфраструктура ноды только начинает развиваться. Популярными фреймворками для Ноды являются:

  1. AdonisJs. AdonisJs — это фреймворк, который работает на всех основных операционных системах. Он обладает стабильной экосистемой для написания серверных веб-приложений. Идеально подходит для разработчиков Laravel, которые пробуют переход на Node.js. Особенности AdonisJs:

    • есть ORM, который помогает создавать безопасные SQL-запросы,
    • API и система аутентификации на основе сеансов,
    • лёгкий в освоении конструктор запросов,
    • высокая безопасность,
    • поддержка баз данных No-SQL, таких как MongoDB.
  2. Express.js. Express.js — это самый простой, гибкий и быстрый фреймворк Node.js. Express.js подходит для быстрой разработки простых приложений, так как имеет легкодоступные инструменты генерации API. Особенности Express.js:

    • высокая настраиваемость,
    • быстрое освоение программы,
    • быстрая разработка на стороне сервера,
    • поддерживает архитектуру MVC,
    • поддержка NoSQL-баз данных из коробки.
  3. Koa.js. Этот фреймворк был создан командой Express.js. Разработчики хотели учесть все недостатки Express.js и создать более совершенный продукт. Koa работает в разных браузерах, без использования обратных вызовов и обладает мощной системой обработки ошибок. Может использоваться для фронтенд- и бэкэнд-системы. Особенности Koa.js:

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

Если сравнивать Python и Node, то их главное различие ― сфера применения. Нода подходит для веб-разработки и некоторых десктопных программ, в то время как Python является универсальным решением. С его помощью можно сделать не только веб-разработку, но и Data Science, Machine Learning.

Если вы хотите попробовать Node.js, вам поможет статья Как установить Node.js на Ubuntu. Если у вас уже есть Node, вы можете узнать версию программы. Как проверить версию Node.js? Зайдите в терминал и введите команду node -v.

Была ли эта статья полезной?
Пользователи, считающие этот материал полезным: 1 из 1