Node.js

редактировать
Среда выполнения JavaScript
Node.js
Узел.js logo.svg
Автор (ы) Райан Даль
Разработчик (s) Различное
Первоначальный выпуск27 мая 2009 г.; 11 лет назад (27.05.2009)
Стабильный выпуск 15.0.1 / 21 октября 2020 г.; 11 дней назад (2020-10-21)
Репозиторий Измените в Викиданных
Написано наC, C ++, JavaScript
Операционная система z / OS, Linux, macOS, Microsoft Windows, SmartOS, FreeBSD, OpenBSD, IBM AIX
Тип Среда выполнения
Лицензия Лицензия MIT
Веб-сайтnodejs.org Измените это в Викиданных

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

Хотя .jsявляется стандартным расширением имени файла для кода JavaScript, имя «Node.js» не относится к конкретному файлу в этом контексте и является просто название продукта. Node.js имеет управляемую событиями архитектуру, поддерживающую асинхронный ввод-вывод. Эти варианты дизайна направлены на оптимизацию пропускной способности и масштабируемости в веб-приложениях с множеством операций ввода / вывода, а также для веб-приложений в реальном времени (например, общение в реальном времени программы и браузерные игры ).

Проект Node.js распределенной разработки ранее находился под управлением Node.js Foundation, а теперь объединен с JS Foundation, чтобы сформировать OpenJS Foundation, чему способствует программа совместных проектов Linux Foundation.

Корпоративные пользователи программного обеспечения Node.js включают GoDaddy, Groupon, IBM, LinkedIn, Microsoft, Netflix, PayPal, Rakuten, SAP, Voxer, Walmart, Yahoo! и Amazon Web Services.

Содержание
  • 1 История
  • 2 Обзор
    • 2.1 Архитектура платформы
    • 2.2 Поддержка отрасли
  • 3 Релизы
  • 4 Технические подробности
    • 4.1 Внутреннее устройство
    • 4.2 Резьба ing
    • 4.3 V8
    • 4.4 Управление пакетами
    • 4.5 Унифицированный API
    • 4.6 Цикл событий
    • 4.7 WebAssembly
    • 4.8 Собственные привязки
  • 5 Управление проектом
  • 6 См. также
  • 7 Ссылки
  • 8 Дополнительная литература
  • 9 Внешние ссылки
История
Райан Даль, создатель Node.js, в 2010 г.

Первоначально Node.js был написан Райаном Далем в 2009 году, примерно через тринадцать лет после появления первой серверной среды JavaScript, Netscape LiveWire Pro Web. Первоначальный выпуск поддерживал только Linux и Mac OS X. Его разработкой и обслуживанием руководил Дал, а позже спонсировал Джойент..

Даль подверг критике ограниченные возможности самого популярного веб-сервера в 2009 году, HTTP-сервера Apache, для обработки большого количества одновременных подключений (до 10 000 и более) и наиболее распространенного способа создания кода (последовательное программирование), когда код либо блокирует весь процесс, либо подразумевает несколько стеков выполнения в случае одновременных подключений.

Даль продемонстрировал свой проект на первой европейской выставке JSConf 8 ноября 2009 г. Node.js объединил движок JavaScript V8 Google и цикл обработки событий и низкоуровневый I/O API.

В январе 2010 года для среды Node.js был представлен менеджер пакетов под названием npm.. Диспетчер пакетов упрощает программистам публикацию и совместное использование исходного кода пакетов Node.js и предназначен для упрощения установки, обновления и удаления пакетов.

В июне 2011 года Microsoft и Joyent внедрили собственный Windows версия Node.js. Первая сборка Node.js, поддерживающая Windows, была выпущена в июле 2011 года.

В январе 2012 года Даль отошел в сторону, назначив своего коллегу и создателя npm Исаака Шлютера для управления проектом. В январе 2014 года Шлютер объявил, что Тимоти Дж. Фонтейн возглавит проект.

В декабре 2014 года Федор Индутный запустил io.js, форк Node.js. Из-за внутреннего конфликта по поводу управления Joyent io.js был создан как альтернатива открытого управления с отдельным техническим комитетом. В отличие от Node.js, авторы планировали поддерживать io.js в актуальном состоянии с помощью последних выпусков движка Google V8 JavaScript.

В феврале 2015 года намерение сформировать нейтральный фонд Node.js было объявил. К июню 2015 года сообщества Node.js и io.js проголосовали за совместную работу в рамках Node.js Foundation.

В сентябре 2015 года Node.js v0.12 и io.js v3.3 были снова объединены вместе в Node v4.0. Это слияние принесло функции V8 ES6 в Node.js и обеспечило долгосрочный цикл выпуска поддержки. По состоянию на 2016 год веб-сайт io.js рекомендует разработчикам вернуться к Node.js и не планировать дальнейшие выпуски io.js из-за слияния.

В 2019 году JS Foundation и Node.js Foundation объединился в OpenJS Foundation.

Обзор

Node.js позволяет создавать веб-серверы и сетевые инструменты с использованием JavaScript и набора «модули», которые обрабатывают различные основные функции. Предусмотрены модули для файловой системы ввода-вывода, сети (DNS, HTTP, TCP, TLS / SSL или UDP ), двоичные данные (буферы), криптографические функции, потоки данных и другие основные функции. Модули Node.js используют API, предназначенный для упрощения написания серверных приложений.

JavaScript - единственный язык, который Node.js поддерживает изначально, но многие языки компиляции в JS являются имеется в наличии. В результате приложения Node.js могут быть написаны на CoffeeScript, Dart, TypeScript, ClojureScript и других.

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

Узел.js официально поддерживается в Linux, macOS и Microsoft Windows 8.1 и Server 2012 (и более поздних версиях), с поддержкой уровня 2 для SmartOS и IBM AIX и экспериментальная поддержка FreeBSD. OpenBSD также работает, и версии LTS доступны для IBM i (AS / 400). Предоставленный исходный код также может быть построен на операционных системах, аналогичных официально поддерживаемым, или может быть изменен третьими сторонами для поддержки других, таких как серверы NonStop OS и Unix.

Архитектура платформы

Node.js обеспечивает событийное программирование на веб-серверах, что позволяет разрабатывать быстрые веб-серверы на JavaScript. Разработчики могут создавать масштабируемые серверы без использования потоковой передачи, используя упрощенную модель программирования, управляемого событиями, которая использует обратные вызовы для сигнализации о завершении задачи. Node.js объединяет простоту языка сценариев (JavaScript) с мощностью сетевого программирования Unix.

Node.js был построен на основе Google V8 JavaScript-движка, поскольку его исходный код был открытым по лицензии BSD. Он хорошо разбирается в основах Интернета, таких как HTTP, DNS, TCP. JavaScript также был хорошо известным языком, благодаря чему Node. js доступен сообществу веб-разработчиков .

Поддержка отрасли

Существуют тысячи библиотек с открытым исходным кодом для Node.js, большинство из которых размещено на веб-сайте npm. Сообщество разработчиков Node.js имеет два основных списка рассылки и канал IRC # node.js на freenode. Существует множество конференций и мероприятий для разработчиков, которые поддерживают сообщество Node.js, включая NodeConf, Node Interactive и Node Summit, а также ряд региональных мероприятий..

Сообщество открытого исходного кода разработало веб-фреймворки для ускорения разработки приложений. К таким фреймворкам относятся Connect, Express.js, Socket.IO, Feathers.js, Koa.js, Hapi.js, Sails.js, Метеор, Дерби и многие другие. Также были созданы различные пакеты для взаимодействия с другими языками или средами выполнения, такими как Microsoft.NET.

Современный рабочий стол IDE предоставляют функции редактирования и отладки специально для приложений Node.js. К таким IDE относятся, JetBrains WebStorm, Microsoft Visual Studio (с инструментами Node.js для Visual Studio или TypeScript с определениями узлов,) NetBeans, Nodeclipse Enide Studio (на основе Eclipse ) и Visual Studio Code. Некоторые интерактивные веб-среды IDE также поддерживают Node.js, такие как Codeanywhere, Codenvy, Cloud9 IDE, Koding и редактор визуальных потоков в . Node-RED.

Node.js поддерживается рядом платформ облачного хостинга, таких как Jelastic, Google Cloud Platform, AWS Elastic Beanstalk, Джойент и другие.

Выпуски
ВыпускСостояниеКодовое имяДата выпускаЗапуск активного LTSТехническое обслуживание началоКонец обслуживания
Старая версия, больше не поддерживается: v0.10.xСтарая версия, больше не поддерживается: Конец срока службы11 марта 2013 г.-2015-10-012016-10-31
Старая версия, больше не поддерживается: v0.12.xСтарая версия, больше не поддерживается: конец -Life2015-02-06-2016-04-012016-12-31
Старая версия, больше не поддерживается: 4.xСтарая версия, больше не обслуживается: Конец срока службыАргон 08.09.201501.10.201501.04.20172018-04-30
Старая версия, больше не поддерживается: 5.xСтарая версия, больше не поддерживается: End of Life2015-10-29Н / Д2016-06-30
Старая версия, больше не поддерживается: 6.xСтарая версия, больше не поддерживается: Конец срока службыBoron 2016-04-262016-10-182018-04-302019-04-30
Старая версия, больше не поддерживается: 7.xСтарая версия, больше не поддерживается: End of Life2016-10-25Н / Д30.06.2017
Старая версия, больше не поддерживается: 8.xСтарая версия, больше не поддерживается: Конец срока службыCarbon 05.05.2017 302017-10-312019-01-012019-12-31
Старая версия, больше не поддерживается: 9.xСтарая версия, больше не поддерживается: Конец жизненного цикла01.10.2017Н / Д2018-06-30
Старая версия, но все еще поддерживается: 10.xСтарая версия, но все еще поддерживается: Maintenance LTSDubnium 24.04.201830.10.20182020-05-192021-04-30
Старая версия, больше не поддерживается: 11.xСтарая версия, больше не поддерживается: End of Life2018-10-23Н / Д2019-06-01
Старая версия, но все еще поддерживается: 12.xСтарая версия, но все еще поддерживается : Активный LTSЭрбий 23.04.201921.10.201930.11.20192022-04-30
Старая версия, больше не поддерживается: 13.xСтарая версия, больше не поддерживается: End of Life2019-10-22Н / Д2020-04-012020-06-01
Старая версия, но все еще поддерживается: 14.xСтарая версия, которая все еще поддерживается: Active LTSFermium 2020-04-212020-10-272021-10-192023- 04-30
Текущая стабильная версия: 15.xТекущая стабильная версия: Текущая2020-10-20Н / Д2021-04-012021-06-01
Будущий выпуск: 16.xБудущий выпуск: ОжидаетсяГаллий 2021-04-202021-10-262022-10-182024-04-30
Условные обозначения: Старая версия Старая версия, все еще поддерживается Последняя версия Последняя предварительная версия Будущий выпуск

Новые основные выпуски Node.js удаляются из основной ветки GitHub каждые шесть месяцев. Версии с четными номерами сокращаются в апреле, а версии с нечетными номерами - в октябре. Когда выпускается новая нечетная версия, предыдущая четная версия подвергается переходу на Долгосрочную поддержку (LTS), что дает этой версии 18 месяцев активной поддержки с даты, когда она обозначена как LTS. По истечении этих 18 месяцев выпуск LTS получает дополнительную техническую поддержку в течение 12 месяцев. Активная версия получает неизменяемые резервные копии изменений через несколько недель после их появления в текущем выпуске. В служебный выпуск входят только критические исправления и обновления документации. Рабочая группа LTS управляет стратегией и политикой в ​​сотрудничестве с Техническим руководящим комитетом фонда Node.js.

.

Технические подробности

Node.js - это среда выполнения JavaScript, которая обрабатывает входящие запросы в цикле, называемом циклом событий.

Внутреннее

Node.js использует libuv под капотом для обработки асинхронных событий. Libuv - это уровень абстракции для функций сети и файловой системы как в Windows, так и в системах на основе POSIX, таких как Linux, macOS, OSS на NonStop и Unix.

Threading

Node.js работает с single-thread циклом событий, используя неблокирующий ввод-вывод вызовов, что позволяет поддерживать десятки тысяч одновременных подключений без затрат на переключение контекста потока . Дизайн совместного использования одного потока среди всех запросов, использующих шаблон наблюдателя , предназначен для создания приложений с высокой степенью параллелизма, в которых любая функция, выполняющая ввод-вывод, должна использовать обратный вызов . Для поддержки однопоточного цикла обработки событий Node.js использует библиотеку libuv, которая, в свою очередь, использует пул потоков фиксированного размера, который обрабатывает некоторые неблокирующие операции асинхронного ввода-вывода.

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

Обратной стороной этого однопоточного подхода является то, что Node.js не позволяет вертикальное масштабирование за счет увеличения числа ядер ЦП машины, на которой он запущен. без использования дополнительных модулей, таких как кластер, StrongLoop Process Manager или pm2. Однако разработчики могут увеличить количество потоков по умолчанию в пуле потоков libuv. Сервер операционная система (ОС), вероятно, распределяет эти потоки по нескольким ядрам. Другая проблема заключается в том, что длительные вычисления и другие задачи, связанные с процессором, замораживают весь цикл событий до завершения.

V8

V8 - это механизм выполнения JavaScript, который изначально был построен для Google Chrome. Затем в 2008 году Google предоставил открытый исходный код. Написанный на C ++, V8 компилирует исходный код JavaScript в собственный машинный код во время выполнения. По состоянию на 2016 год он также включает в себя Ignition, интерпретатор байт-кода .

Управление пакетами

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

Unified API

, Node.js можно комбинировать с браузером, база данных, поддерживающая данные JSON (например, Postgres, MongoDB или CouchDB ) и JSON для унифицированного стека разработки JavaScript. Благодаря адаптации шаблонов разработки на стороне сервера, таких как MVC, MVP, MVVM и т. Д., Node.js позволяет повторно использовать той же модели и служебного интерфейса между стороной клиента и стороной сервера.

Цикл событий

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

WebAssembly

Node.js поддерживает WebAssembly и, начиная с Node 14, имеет экспериментальную поддержку WASI, системного интерфейса WebAssembly.

Собственные привязки

Node.js предоставляет способ создания «надстроек» через API на основе C под названием N-API, который можно использовать для создания загружаемых (импортируемых) .nodeмодули из исходного кода, написанного на C / C ++. Модули можно напрямую загружать в память и запускать из среды JS как простые модули CommonJS. Реализация N-API основана на внутренних объектах C / C ++ Node.js и V8, требующих от пользователей импорта (#include ), специфичных для Node.js заголовков в их собственный исходный код. Поскольку платформа Node.js постоянно развивается, совместимость API подвержена изменениям и иногда может нарушаться в новой версии (как следствие, для правильной работы модули должны быть построены для конкретной версии Node.js). Для решения этой проблемы третьи стороны ввели оболочки С / С ++ с открытым кодом поверх API, что частично решает проблему. Они упрощают интерфейсы, но в качестве побочного эффекта могут также вносить сложности, с которыми приходится иметь дело разработчикам. Несмотря на то, что основная функциональность Node.js находится во встроенной библиотеке JavaScript, модули, написанные на C ++, можно использовать для расширения возможностей и повышения производительности приложений.

Для создания таких модулей необходим соответствующий компилятор C ++ и необходимые заголовки (последние обычно поставляются с самим Node.js): gcc, clang или MSVC ++.

N-API похож на Java Native Interface.

Управление проектом

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

Технический руководящий комитет (TSC) Фонда Node.js является техническим руководящим органом Фонда Node.js. TSC отвечает за основное репозиторий Node.js, а также за зависимые и смежные проекты. Обычно TSC делегирует управление этими проектами рабочим группам или комитетам. Группа LTS, которая управляет выпусками с долгосрочной поддержкой, является одной из таких групп. Другие текущие группы включают веб-сайт, потоки, сборку, диагностику, i18n, евангелизм, Docker, аддон API, бенчмаркинг, вскрытие, Intl, документацию и тестирование.

В августе 2017 года треть членов TSC подал в отставку из-за спора, связанного с кодексом поведения проекта.

См. также
  • Портал бесплатного программного обеспечения с открытым исходным кодом
Ссылки
Дополнительная литература
  • Хьюз-Краучер, Том; Уилсон, Майк (апрель 2012 г.), Up and Running with Node.js, O'Reilly Media, ISBN 978-1-4493-9858-3
  • Орнбо, Джордж (сентябрь 2012 г.), Sams Teach Yourself Node.js за 24 часа, SAMS Publishing, ISBN 978-0-672-33595-2
  • Тейшейра, Педро (октябрь 2012 г.), Professional Node.js, John Wiley Sons, ISBN 978-1-118-22754-1
  • Рэндал Л. Шварц и Аарон Ньюкомб (9 января 2013 г.). «Эпизод 237: Node.js». twit.tv/show/floss-weekly (Подкаст). TWiT.tv. Событие происходит в 1:08:13. Проверено 9 января 2013 г.
  • Gackenheimer, Cory (октябрь 2013 г.), Node.js Recipes: A Problem-Solution Approach, Apress, ISBN 978-1-4302 -6058-5
Внешние ссылки
Викискладе есть материалы, относящиеся к Node.js.

Последняя правка сделана 2021-05-31 11:37:42
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте