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

Во-первых, давайте рассмотрим тот факт, что последние пару лет JavaScript был самым популярным и быстрорастущим языком программирования (на основе исследования, проведенного Business Insider и StackOverflow )

Node.js - это JavaScript-фреймворк, который последовал за этим прогрессом и в результате стал самым популярным фреймворком в 2018 году. Индекс BOSS, который отслеживает взрывной рост программного обеспечения с открытым исходным кодом, поставил Node.js на четвертое место, уступая Linux. , Git и MySQL.

Вот еще несколько фактов, подтверждающих популярность Node.js:

  • 1 миллиард загрузок
  • 10 миллионов пользователей
  • 800 000 строительных блоков
  • более 2000 авторов

Такие компании, как IBM, Intel, Google, Microsoft и Paypal, являются членами Node Foundations.

Вы можете использовать Node.js для создания высокопроизводительных приложений с низкой задержкой.

Приложения Node нашли application в корпоративных приложениях, облачных стеках, IoT, мобильных веб-сайтах, роботах, механизмах API и многом другом.

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

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

Синхронный код требует, чтобы все операторы программирования выполнялись в правильном порядке. Если программе нужно работать с внешними сервисами, нужно дождаться поступления информации. Пока мы ждем, работать нельзя. Если в коде много операций ввода-вывода, компьютер будет проводить большую часть времени в ожидании. Можно сказать, что ввод-вывод блокирует работу компьютера в полную силу. Вот почему было бы здорово, если бы мы могли инициировать вызовы ввода-вывода и работать над чем-то еще, пока мы ждем - асинхронно. Как только мы получим необходимую информацию, программа может сигнализировать, что событие ожидания данных выполнено. Зная, что событие выполнено, мы можем выполнить с данными то, что нам нужно, - выполнить функцию обратного вызова.

Чем он отличается от других платформ?

В предыдущем разделе мы подчеркнули, что, выполняя код асинхронно, мы можем одновременно выполнять больше действий. Большинство моделей параллелизма основаны на использовании потоков ОС. Это может показаться неожиданным, но выполнение кода Node.js является однопоточным. Причина в том, что использование потоков для работы в сети неэффективно и сложно. Итак, как именно это делает Node.js?

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

Узел не имеет блокирующего вызова Start-The-Event-Loop. Он входит в цикл сразу после выполнения входного скрипта. Цикл событий представлен как часть конструкции среды выполнения, а не как библиотека. На этот дизайн повлияли Ruby’s Event Machine и Python Twisted.

Представление

Одно из главных преимуществ Node.js - великолепная производительность. Следующие диаграммы показывают, насколько резким может быть рост производительности:

Есть три ключевых фактора, которые позволяют приложениям узлов работать так хорошо:

1) Node.js основан на движке JavaScript V8, разработанном и оптимизированном Google.

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

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

Снижение цены

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

Интернет-медиа-компания Bustle сообщила о достижении 70% экономии за счет использования serverless и Node.js.

Опыт разработчиков

Работа в Node.js - это действительно отличный опыт, но вам не нужно верить (только) мне на слово.
На следующем фото показаны наиболее часто используемые слова разработчиками для описания своего опыта работы в Node. :

Производительность разработчика

Коэффициент разработчика утверждает, что 96% высшего руководства считают, что повышение производительности труда разработчиков является высоким / средним приоритетом. Они также думают, что просто повышая производительность труда разработчиков, компания может добиться лучших результатов в продажах, быстрее выводить продукты на рынок, опередить своих конкурентов и многое другое.

На самом деле разработчики могут работать настолько продуктивно, насколько позволяют им инструменты.

Такие компании, как Walmart, Netflix, OpenTable и HomeAway перешли на Node.js, и все сообщают о значительном увеличении производительности труда разработчиков.

Диспетчеры пакетов узлов

Если мы действительно хотим использовать максимальный потенциал Node.js, мы должны ознакомиться с доступными менеджерами пакетов. Пакеты узлов - один из основных факторов, обеспечивающих быструю разработку. Зачем переписывать код, если можно использовать проверенные пакеты с открытым исходным кодом?
Для обработки пакетов вам понадобится менеджер пакетов. Наиболее часто используемые менеджеры пакетов включают npm, yarn и pnpm.

npm

npm - это наиболее широко используемый менеджер пакетов по умолчанию. Он идеально подходит для новичков и имеет отличную поддержку. В предыдущих версиях было две основных проблемы:

  • Изначально у npm не было файла блокировки. Точные версии каждой зависимости точно не указаны. Код будет запускаться с последними версиями, что вызывает проблемы совместимости.
  • Npm не был детерминированным - разные версии пакетов были разрешены на разных машинах.

Пряжа устранила эти проблемы и привлекла огромную аудиторию. Позже обновления npm устранили проблемы и сделали его таким же удобным, как Yarn.

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

Пряжа

Yarn была создана Facebook с целью исправить проблемы масштабируемости, которые в то время возникали у npm. Три основных принципа пряжи: скорость, надежность и безопасность. Yarn может устанавливать пакеты быстрее, используя локальное кэширование - гораздо быстрее получить пакет из кеш-памяти, чем ждать загрузки. Локальное кеширование также включает автономный режим - пакеты в кеше можно устанавливать напрямую. Yarn был первым, кто представил файл с заблокированными версиями пакетов, поэтому код не мог принудительно запускаться в последней версии. Безопасность обеспечивается использованием контрольных сумм перед исполнением.

У пряжи есть некоторые уникальные особенности, которые делают ее быстрее, чем npm. Пакеты устанавливаются параллельно, а npm - последовательно. Yarn гарантирует, что зависимости будут установлены одинаково на другом компьютере, независимо от порядка установки. Yarn удаляет несовпадающие версии зависимостей, чтобы избежать дублирования в node_modules. Лучшие результаты также видны с точки зрения производительности сети - запросы эффективно выстраиваются в очередь, что позволяет избежать водопада запросов и полностью использовать сеть.

промилле

Если у нас есть десять проектов, которые используют одни и те же десять пакетов, каждый проект будет иметь свою собственную копию в node_modules. Это не очень эффективно с точки зрения дискового пространства. pnpm решает эту проблему, устанавливая на диск только одну копию пакета. Каталог node_modules будет содержать только жесткую ссылку на расположение пакета на диске. Разработчики пакетного менеджера утверждают, что он работает так же быстро, как yarn и npm, а в некоторых случаях даже быстрее. pnpm является строгим в том смысле, что он обращается только к зависимостям, указанным в package.json. Он отлично подходит для многопакетных репозиториев (монорепсов).

Rush - идеально подходит для совместной работы

Технически Rush не является менеджером пакетов, но позволяет вам выбрать, хотите ли вы использовать npm, yarn или pnpm. Он обеспечивает, чтобы одна и та же версия диспетчера пакетов использовалась всеми членами команды. Он был разработан для управления монорепозиторием и помогает организовать рабочий процесс, если есть много компонентов.

Что дальше в мире диспетчеров пакетов?

Следующий многообещающий менеджер пакетов - tink. Он был объявлен разработчиками npm и все еще находится в разработке. Говорят, что tink обеспечит более быструю установку, которая будет выполняться в фоновом режиме. Файлы в зависимостях будут по частям идентичны файлам в реестре. Для работы над другим проектом потребуется только клонирование и запуск проекта.

Tink действует как замена Node.js, работая из файла package-lock.json. Это позволит вам запустить проект без node_modules. Модули узлов будут установлены в фоновом режиме. Через пару секунд сервер запустится. Если вы заглянете внутрь node_modules, вы найдете package-map.json вместо модулей. Package-map.json состоит из хэшей всех файлов в каждом установленном пакете и проверяется перед загрузкой для обеспечения безопасности.

Вы можете попробовать это здесь.

Заключение

Node.js обеспечивает отличную производительность в качестве архитектурной основы для многих Интернет-приложений. Менеджер пакетов по умолчанию (npm) отлично подойдет для большинства приложений. Если в вашем проекте есть некоторые спецификации, которые npm не может удовлетворить, вам следует взглянуть на альтернативы и посмотреть, соответствуют ли они вашим потребностям. Yarn может ускорить и автономную установку (в некоторых случаях), в то время как pnpm сэкономит дополнительное дисковое пространство и полезен для мультиупаковки репозиториев. Если вы хотите увидеть, что нас ждет в будущем, загрузите tink и попробуйте.

Надеюсь, вам понравилась статья.
Какой у вас опыт работы с node.js? Не стесняйтесь комментировать или спрашивать что-нибудь ниже 👇🏼