Автор (ы) | Райан Даль |
---|---|
Разработчик (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.
Первоначально 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-01 | 2016-10-31 | |
Старая версия, больше не поддерживается: v0.12.x | Старая версия, больше не поддерживается: конец -Life | 2015-02-06 | - | 2016-04-01 | 2016-12-31 | |
Старая версия, больше не поддерживается: 4.x | Старая версия, больше не обслуживается: Конец срока службы | Аргон | 08.09.2015 | 01.10.2015 | 01.04.2017 | 2018-04-30 |
Старая версия, больше не поддерживается: 5.x | Старая версия, больше не поддерживается: End of Life | 2015-10-29 | Н / Д | 2016-06-30 | ||
Старая версия, больше не поддерживается: 6.x | Старая версия, больше не поддерживается: Конец срока службы | Boron | 2016-04-26 | 2016-10-18 | 2018-04-30 | 2019-04-30 |
Старая версия, больше не поддерживается: 7.x | Старая версия, больше не поддерживается: End of Life | 2016-10-25 | Н / Д | 30.06.2017 | ||
Старая версия, больше не поддерживается: 8.x | Старая версия, больше не поддерживается: Конец срока службы | Carbon | 05.05.2017 30 | 2017-10-31 | 2019-01-01 | 2019-12-31 |
Старая версия, больше не поддерживается: 9.x | Старая версия, больше не поддерживается: Конец жизненного цикла | 01.10.2017 | Н / Д | 2018-06-30 | ||
Старая версия, но все еще поддерживается: 10.x | Старая версия, но все еще поддерживается: Maintenance LTS | Dubnium | 24.04.2018 | 30.10.2018 | 2020-05-19 | 2021-04-30 |
Старая версия, больше не поддерживается: 11.x | Старая версия, больше не поддерживается: End of Life | 2018-10-23 | Н / Д | 2019-06-01 | ||
Старая версия, но все еще поддерживается: 12.x | Старая версия, но все еще поддерживается : Активный LTS | Эрбий | 23.04.2019 | 21.10.2019 | 30.11.2019 | 2022-04-30 |
Старая версия, больше не поддерживается: 13.x | Старая версия, больше не поддерживается: End of Life | 2019-10-22 | Н / Д | 2020-04-01 | 2020-06-01 | |
Старая версия, но все еще поддерживается: 14.x | Старая версия, которая все еще поддерживается: Active LTS | Fermium | 2020-04-21 | 2020-10-27 | 2021-10-19 | 2023- 04-30 |
Текущая стабильная версия: 15.x | Текущая стабильная версия: Текущая | 2020-10-20 | Н / Д | 2021-04-01 | 2021-06-01 | |
Будущий выпуск: 16.x | Будущий выпуск: Ожидается | Галлий | 2021-04-20 | 2021-10-26 | 2022-10-18 | 2024-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.
Node.js работает с single-thread циклом событий, используя неблокирующий ввод-вывод вызовов, что позволяет поддерживать десятки тысяч одновременных подключений без затрат на переключение контекста потока . Дизайн совместного использования одного потока среди всех запросов, использующих шаблон наблюдателя , предназначен для создания приложений с высокой степенью параллелизма, в которых любая функция, выполняющая ввод-вывод, должна использовать обратный вызов . Для поддержки однопоточного цикла обработки событий Node.js использует библиотеку libuv, которая, в свою очередь, использует пул потоков фиксированного размера, который обрабатывает некоторые неблокирующие операции асинхронного ввода-вывода.
Пул потоков обрабатывает выполнение параллельных задач в Node.js. Вызов функции основного потока отправляет задачи в общую очередь задач, которые тянут и выполняют потоки в пуле потоков. По своей сути неблокирующие системные функции, такие как работа в сети, преобразуются в неблокирующие сокеты на стороне ядра, в то время как по своей сути блокирующие системные функции, такие как файловый ввод-вывод, выполняются блокирующим образом в своих собственных потоках. Когда поток в пуле потоков завершает задачу, он информирует об этом основной поток, который, в свою очередь, пробуждается и выполняет зарегистрированный обратный вызов.
Обратной стороной этого однопоточного подхода является то, что Node.js не позволяет вертикальное масштабирование за счет увеличения числа ядер ЦП машины, на которой он запущен. без использования дополнительных модулей, таких как кластер, StrongLoop Process Manager или pm2. Однако разработчики могут увеличить количество потоков по умолчанию в пуле потоков libuv. Сервер операционная система (ОС), вероятно, распределяет эти потоки по нескольким ядрам. Другая проблема заключается в том, что длительные вычисления и другие задачи, связанные с процессором, замораживают весь цикл событий до завершения.
V8 - это механизм выполнения JavaScript, который изначально был построен для Google Chrome. Затем в 2008 году Google предоставил открытый исходный код. Написанный на C ++, V8 компилирует исходный код JavaScript в собственный машинный код во время выполнения. По состоянию на 2016 год он также включает в себя Ignition, интерпретатор байт-кода .
npm - это предустановленный менеджер пакетов для серверной платформы Node.js. Он устанавливает программы Node.js из реестра npm, организуя установку и управление сторонними программами Node.js. Пакеты в реестре npm могут варьироваться от простых вспомогательных библиотек, таких как Lodash, до средств выполнения задач, таких как Grunt.
, Node.js можно комбинировать с браузером, база данных, поддерживающая данные JSON (например, Postgres, MongoDB или CouchDB ) и JSON для унифицированного стека разработки JavaScript. Благодаря адаптации шаблонов разработки на стороне сервера, таких как MVC, MVP, MVVM и т. Д., Node.js позволяет повторно использовать той же модели и служебного интерфейса между стороной клиента и стороной сервера.
Node.js регистрируется в операционной системе, поэтому ОС уведомляет его о подключениях и выполняет обратный вызов. В среде выполнения Node.js каждое соединение представляет собой небольшое выделение кучи . Традиционно каждое соединение обрабатывались относительно тяжелыми процессами или потоками ОС. Node.js использует цикл событий для масштабируемости вместо процессов или потоков. В отличие от других серверов, управляемых событиями, цикл обработки событий Node.js не требует явного вызова. Вместо этого определяются обратные вызовы, и сервер автоматически входит в цикл событий в конце определения обратного вызова. Node.js выходит из цикла обработки событий, когда больше не нужно выполнять обратные вызовы.
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 подал в отставку из-за спора, связанного с кодексом поведения проекта.
Викискладе есть материалы, относящиеся к Node.js. |