Node.js

Node.js — кроссплатформенная свободная среда выполнения JavaScript, предназначенная для работы на различных операционных системах, включая Microsoft Windows, Linux, Unix, macOS и другие. Node.js использует движок V8 для исполнения JavaScript-кода вне веб-браузера.

Общие сведения
Node.js
Тип среда выполнения
Автор Райан Дал
Разработчик OpenJS Foundation
Написана на JavaScript, C++, Python, C
Операционные системы z/OS, Linux, macOS, Microsoft Windows, SmartOS, FreeBSD, OpenBSD, IBM AIX
Первый выпуск 27 мая 2009
Последняя версия
Репозиторий github.com/nodejs/node
Лицензия MIT License
Сайт nodejs.org (англ.)

Описание

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

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

Проект Node.js ранее управлялся фондом Node.js Foundation[4], который в дальнейшем объединился с JS Foundation в OpenJS Foundation. OpenJS Foundation курируется программой Collaborative Projects Фонда Linux[5].

История

Node.js был разработан Райаном Далом в 2009 году[6], примерно через 13 лет после появления первой серверной среды JavaScript — Netscape LiveWire Pro Web[7]. Первая версия поддерживала только Linux и Mac OS X. Позже ведущим спонсором развития выступила компания Joyent[8].

Дал критиковал ограниченную способность Apache HTTP Server обрабатывать десятки тысяч одновременных соединений, а также традиционную парадигму последовательного программирования, при которой приложения могут блокировать процессы или создавать множество стэков выполнения[9].

Node.js был публично представлен Далом на первой европейской конференции JSConf 8 ноября 2009 года[10][11]. Проект объединил движок Google V8, событийный цикл и низкоуровневый API для ввода-вывода[12].

В январе 2010 года был представлен npm — менеджер пакетов для Node.js[13]. npm позволяет публиковать и распространять модули Node.js вместе с исходным кодом, а также упрощает установку, обновление и удаление пакетов[12].

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

В январе 2012 года Дал передал руководство проектом Айзеку Шлютеру, создателю npm[15]. В январе 2014 года Шлютер сообщил, что новым руководителем станет Тимоти Джей Фонтейн[16].

В декабре 2014 года Фёдор Индутный создал форк io.js, как альтернативу управлению Joyent, с открытой моделью управления проектом. Целью было обеспечить большую открытость и интеграцию последних версий движка V8[17].

Node.js Foundation был создан для объединения проектов Node.js и io.js — анонс состоялся в феврале 2015 года[18]. В сентябре 2015 года произошла фактическая интеграция: Node.js v0.12 и io.js v3.3 были объединены в Node.js v4.0[19]. Это слияние внедрило многие возможности ES6 и инициировало долгосрочный цикл поддержки (LTS)[20]. К 2016 году официальный сайт io.js рекомендовал использовать Node.js и объявил о прекращении развития форка[21].

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

Брендинг

Логотип Node.js выполнен в виде зелёного шестиугольника с наложением — символизируя кроссплатформенность среды[22]. В феврале 2024 года, по итогам конкурса, официальным талисманом Node.js стала черепаха Rocket Turtle[23].

Обзор

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

JavaScript — единственный язык, поддерживаемый Node.js нативно, однако доступны различные языки, транслируемые в JavaScript[28]. Приложения Node.js могут быть написаны на CoffeeScript[29], Dart, TypeScript, ClojureScript и других языках.

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

Официальная поддержка реализована для Linux, macOS и Microsoft Windows начиная с версий 8.1 и Server 2012[30], c расширенной поддержкой SmartOS и IBM AIX, экспериментальной — для FreeBSD. OpenBSD также работает, а для IBM i (AS/400) доступны LTS-версии[31]. Исходный код можно собрать и под другие совместимые ОС, например NonStop OS[32] и некоторые UNIX-серверы.

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

Node.js позволяет разрабатывать быстрые веб-серверы на JavaScript с использованием событийно-ориентированного программирования[12]. Разработчики могут строить масштабируемые серверы без явного использования потоков, применяя модель с колбэками для сигнализации о завершении задач[12]. Node.js сочетает простоту скриптового языка с возможностями сетевого программирования UNIX[12].

Node.js построен на основе движка Google V8, который распространяется под BSD-лицензией, и имеет встроенную поддержку базовых протоколов (HTTP, DNS, TCP). Популярность JavaScript облегчила освоение Node.js веб-разработчиками[10].

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

Существует тысячи открытых библиотек для Node.js, большинство из них размещены на сайте npm. В сообществе проходят конференции и мероприятия: NodeConf, Node Interactive, Node Summit и локальные события по всему миру.

Открытым сообществом разработаны фреймворки для ускорения создания приложений, такие как Express.js, Socket.IO, Sails.js, Next.js, Meteor[12][33]. Также существуют решения для интеграции с другими языками и средами (например, Microsoft .NET)[34].

Современные IDE предоставляют специализированные средства для разработки и отладки приложений Node.js, включая Atom, Brackets, WebStorm (от JetBrains)[35][36] ,Microsoft Visual Studio (c Node.js Tools/[37] либо c поддержкой TypeScript[38][39][40]), NetBeans[41], Nodeclipse Enide Studio[42] (на основе Eclipse) и Visual Studio Code[43][44]. Также доступны облачные IDE, такие как Codeanywhere, Eclipse Che, Cloud9 IDE и визуальный редактор Node-RED.

Node.js поддерживается облачными платформами: Jelastic, Google Cloud Platform, AWS Elastic Beanstalk, Azure Web Apps, Joyent и др.

Выпуски

Новые основные релизы Node.js публикуются из основной ветки GitHub каждые полгода: чётные версии — в апреле, нечётные — в октябре. Когда выходит новая нечётная версия, предыдущая чётная получает статус долгосрочной поддержки (LTS) с 12 месяцами активной поддержки и еще 18 месяцами поддержки безопасности и исправлений критических ошибок[45]. Основные решения по выпускам принимаются рабочей группой LTS совместно с техническим комитетом Node.js Foundation.

История версий
Версия Статус Кодовое имя Дата выпуска Окончание поддержки
0.10.x Снята с поддержки 11 марта 2013 31 октября 2016
0.12.x Снята с поддержки 6 февраля 2015 31 декабря 2016
4.x Снята с поддержки Argon[45] 8 сентября 2015 30 апреля 2018
5.x Снята с поддержки 29 октября 2015 30 июня 2016
6.x Снята с поддержки Boron[45] 26 апреля 2016 30 апреля 2019
7.x Снята с поддержки 25 октября 2016 30 июня 2017
8.x Снята с поддержки Carbon[45] 30 мая 2017 31 декабря 2019
9.x Снята с поддержки 1 октября 2017 30 июня 2018
10.x Снята с поддержки Dubnium[45] 24 апреля 2018 30 апреля 2021
11.x Снята с поддержки 23 октября 2018 1 июня 2019
12.x Снята с поддержки Erbium[45] 23 апреля 2019 30 апреля 2022
13.x Снята с поддержки 22 октября 2019 1 июня 2020
14.x Снята с поддержки Fermium[45] 21 апреля 2020 30 апреля 2023
15.x Снята с поддержки 20 октября 2020 1 июня 2021
16.x Снята с поддержки Gallium[45] 20 апреля 2021 11 сентября 2023[46]
17.x Снята с поддержки 19 октября 2021 1 июня 2022
18.x Снята с поддержки Hydrogen[45] 19 апреля 2022 30 апреля 2025
19.x Снята с поддержки 18 октября 2022 1 июня 2023
20.x Поддержка (LTS) Iron[47] 18 апреля 2023 30 апреля 2026
21.x Снята с поддержки 17 октября 2023 1 июня 2024
22.x Активная поддержка (LTS) Jod[45][47] 24 апреля 2024 30 апреля 2027
23.x Снята с поддержки 15 октября 2024 1 июня 2025
24.x Текущая версия Krypton[47] 22 апреля 2025 30 апреля 2028
26.x Запланировано Lithium[47] 2026 2029
28.x Запланировано Magnesium[47] 2027 2030
30.x Запланировано Neon[47] 2028 2031
32.x Запланировано Oxygen[47] 2029 2032
34.x Запланировано Platinum[47] 2030 2033

Технические особенности

Node.js — это среда выполнения JavaScript, обрабатывающая входящие запросы в цикле событий (event loop).

Внутреннее устройство

Внутри Node.js использует библиотеку libuv для асинхронных событий. Она абстрагирует сетевые и файловые операции как для Windows, так и для POSIX-совместимых систем (Linux, macOS, OSS для NonStop и др). Для поддержки HTTP используется nghttp2. С версии 20 добавлена библиотека ada (соответствие WHATWG/URL), с версии 19.5 — simdutf (ускоренная валидация и транскодирование Unicode), с версии 21.3 — simdjson (быстрый парсер JSON).

Многопоточность

Node.js реализует однопоточный событийный цикл, использующий неблокирующие I/O, что позволяет обслуживать десятки тысяч одновременных соединений без издержек на переключение контекстов потоков[48]. Для этой архитектуры задачи, требующие параллелизма, выполняются в пуле потоков библиотеки libuv[3].

Преимущество в высокой масштабируемости сочетается с ограничением на вертикальное масштабирование: без вспомогательных модулей (например, cluster[49], StrongLoop Process Manager[50] или pm2[51]) одна инстанция не может эффективно использовать несколько ядер процессора. При этом количество потоков в пуле libuv настраивается, а ОС распределяет их между ядрами[52]. Кроме того, ресурсоёмкие вычисления на CPU полностью блокируют событийный цикл до их завершения.

V8

V8 — движок исполнения JavaScript, первоначально созданный для Google Chrome и открытый Google в 2008 году. Написан на C++, компилирует исходный код JS в машинный код с помощью JIT-компиляции[3]. С 2016 года в V8 входит байткод-интерпретатор Ignition.

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

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

Событийный цикл

Node.js регистрируется в ОС и получает уведомления о событиях (например, подключения к серверу). Каждое соединение в Node.js — это небольшой объект, связанный с памятью, а не отдельный процесс или поток. Для конкурентного ввода-вывода используется событийный цикл (event loop), а не процессы/потоки[53].

WebAssembly

Node.js поддерживает WebAssembly, а с версии 14 появилась экспериментальная реализация WASI (WebAssembly System Interface).

Нативные модули

Node.js поддерживает создание «аддонов» через API N-API на C/C++. Такие модули с расширением .node могут быть импортированы напрямую из JavaScript-приложения[54]. N-API требует использования инклуда специфических заголовков Node.js и V8. Из-за различий между версиями ядра Node.js существуют библиотеки-обёртки, упрощающие разработку, но за счёт повышения сложности поддержки.

Для сборки подобных модулей нужен совместимый компилятор (gcc, clang, MSVC++) и соответствующие заголовки (обычно поставляются с Node.js). По принципу N-API схож с Java Native Interface.

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

В 2015 году различные ветви сообщества Node.js объединились в Node.js Foundation с открытой моделью управления. Целью организации является содействие широкому внедрению, ускорению развития и развитию долгосрочного сообщества вокруг ядра Node.js[55].

Технический комитет Node.js Foundation (TSC) управляет ключевыми репозиториями проекта и передаёт права отдельным рабочим группам (LTS, Web, Build и др)[56][57]. В августе 2017 года треть состава TSC ушла из-за конфликта по кодексу поведения[58].

Текущие члены TSC[59]
Учётная запись Полное имя
aduh95 Antoine du Hamel
anonrig Yagiz Nizipli
benjamingr Benjamin Gruenbaum
BridgeAR Ruben Bridgewater
gireeshpunathil Gireesh Punathil
jasnell James M Snell
joyeecheung Joyee Cheung
legendecas Chengzhong Wu
marco-ippolito Marco Ippolito
mcollina Matteo Collina
mhdawson Michael Dawson
RafaelGSS Rafael Gonzaga
richardlau Richard Lau
ronag Robert Nagy
ruyadorno Ruy Adorno
ShogunPanda Paolo Insogna
targos Michaël Zasso
tniessen Tobias Nießen

Примечания

  1. Release 24.6.0 — 2025.
  2. gcuomo JavaScript Everywhere and the Three Amigos (Into the wild BLUE yonder!) (англ.). www.ibm.com (24 октября 2013). Дата обращения: 8 июля 2022. Архивировано 14 ноября 2013 года.
  3. 1 2 3 Laurent Orsini. What You Need To Know About Node.js (англ.). readwrite.com (7 ноября 2013). Дата обращения: 6 февраля 2022. Архивировано 11 ноября 2013 года.
  4. Node.js Foundation - Node.js. nodejs.org. Дата обращения: 4 июля 2015. Архивировано 28 июля 2025 года.
  5. Linux Foundation Collaborative Projects. linuxfoundation.org (4 июля 2015). Дата обращения: 4 июля 2015.
  6. About Node.js, and why you should add Node.js to your skill set? Training.com (11 сентября 2016). Дата обращения: 23 октября 2016. Архивировано 1 апреля 2017 года.
  7. Staff, CNET News. Netscape opens intranet attack (англ.), CNET (15 October 1996). Архивировано 18 мая 2017 года. Дата обращения: 20 апреля 2017.
  8. Ryan Dahl. Joyent and Node. Google Groups (9 ноября 2010). Дата обращения: 5 февраля 2015.
  9. Garbar, Dzmitry PHP 7 vs Node.js? They Can Be Partners, Not Competitors For a Developer! belitsoft.com. Дата обращения: 21 декабря 2016. Архивировано 20 мая 2025 года.
  10. 1 2 3 Sams Teach Yourself Node.js in 24 Hours. — Sams Publishing, 2012-09-05.
  11. Ubl, Malte JSConf.eu 2009, Berlin, Germany. www.jsconf.eu (9 сентября 2009). Дата обращения: 9 сентября 2009. Архивировано 11 октября 2025 года.
  12. 1 2 3 4 5 6 7 8 9 Professional Node.js: Building JavaScript Based Scalable Software. — John Wiley & Sons, 2012-10-01.
  13. Earliest releases of npm. GitHub. Дата обращения: 27 июля 2016. Архивировано 2 октября 2025 года.
  14. Ryandahl Porting Node to Windows With Microsoft's Help. nodejs.org (23 июня 2011). Дата обращения: 17 апреля 2016. Архивировано 11 октября 2025 года.
  15. Dahl, Ryan New gatekeeper. Дата обращения: 26 октября 2013.
  16. Schlueter, Isaac The Next Phase of Node.js (15 января 2014). Дата обращения: 21 января 2014. Архивировано 11 октября 2025 года.
  17. Q&A: Why io.js decided to fork Node.js. InfoWorld Tech Watch. Архивировано 5 декабря 2014 года.
  18. Node.js Foundation Advances Community Collaboration, Announces New Members and Ratified Technical Governance. Дата обращения: 4 июля 2015. Архивировано 24 июня 2015 года.
  19. Node.js Foundation Combines Node.js and io.js Into Single Codebase in New Release. nodejs.org (14 сентября 2015). Дата обращения: 28 января 2016. Архивировано 14 октября 2015 года.
  20. io.js and Node.js merge. medium.com (19 мая 2015). Дата обращения: 27 июня 2015. Архивировано 11 октября 2025 года.
  21. Io.js, JavaScript I/O. Дата обращения: 1 сентября 2016. Архивировано 5 сентября 2015 года.
  22. Brand Guide. Node.js. OpenJS Foundation. Дата обращения: 22 марта 2024. Архивировано 12 октября 2025 года.
  23. Node.JS on X: "Meet Rocket Turtle there are many ways 👋". Дата обращения: 22 марта 2024. Архивировано 27 сентября 2024 года.
  24. 1 2 3 Node.js for PHP Developers. — O'Reilly Media, Inc., 2013.
  25. 1 2 3 Node.js Essentials. — Packt Publishing, 2015-11-10.
  26. Smashing Node.js: JavaScript Everywhere. — John Wiley & Sons, 2012-08-14.
  27. Модули. Nodejs.org. Архивировано 10 октября 2025 года.
  28. List of languages that compile to JS. GitHub. Архивировано 5 октября 2025 года.
  29. CoffeeScript on Node.js. — O'Reilly Media, Inc., 2013-04-15. — ISBN 9781449316846.
  30. nodejs/node. GitHub (13 апреля 2022). Архивировано 28 апреля 2022 года.
  31. Foundation, Node js Installing Node.js via package manager (англ.). Node.js. Дата обращения: 19 мая 2019. Архивировано 10 октября 2025 года.
  32. bomBora - Node.js for NonStop. infrasoft.com.au. Infrasoft. Дата обращения: 14 августа 2015. Архивировано 11 марта 2018 года.
  33. Azat Mardan. Express.js Guide: The Comprehensive Book on Express.js. — 2014-05-28.
  34. Tony Patton. Edge.js bridges the gap between Node.js and .NET. TechRepublic (1 июля 2014). Архивировано 14 июля 2014 года.
  35. Node.js. WebStorm Help. Архивировано 20 сентября 2015 года.
  36. Running and Debugging Node.js. WebStorm Help. Архивировано 31 мая 2015 года.
  37. Node.js Tools for Visual Studio. microsoft.com. Дата обращения: 1 февраля 2016. Архивировано 5 сентября 2015 года.
  38. typescript-node-definitions. GitHub. Архивировано 17 июня 2016 года.
  39. DefinitelyTyped. GitHub. Архивировано 9 октября 2025 года.
  40. The repository for high quality TypeScript type definitions. definitelytyped.org. Архивировано 3 февраля 2016 года.
  41. Krill, Paul Node.js takes center stage in NetBeans 8.1. infoworld.com. InfoWorld (10 ноября 2015). Дата обращения: 10 ноября 2015. Архивировано 13 ноября 2015 года.
  42. Nodeclipse, Enide -- Node.JS development in Eclipse. Nodeclipse Website. Архивировано 8 мая 2012 года.
  43. Hello Visual Studio Code (with NodeJS). Channel 9. Архивировано 20 сентября 2015 года.
  44. Node.js Applications with VS Code. Visual Studio Code. Архивировано 5 сентября 2015 года.
  45. 1 2 3 4 5 6 7 8 9 10 nodejs/Release (англ.). GitHub. Дата обращения: 3 мая 2018. Архивировано 11 октября 2025 года.
  46. Bringing forward the End-of-Life Date for Node.js 16. Node.js. Архивировано 25 сентября 2025 года.
  47. 1 2 3 4 5 6 7 8 Node.JS CODENAMES.md (англ.). GitHub. Дата обращения: 6 сентября 2023. Архивировано 25 сентября 2025 года.
  48. Node.js w/1M concurrent connections! caustik's blog (19 августа 2012). Архивировано 11 октября 2025 года.
  49. Модуль cluster в Node.js. nodejs.org. Дата обращения: 19 октября 2017. Архивировано 7 октября 2025 года.
  50. StrongLoop Process Manager. strong-pm.io.
  51. Unitech/pm2: Production process manager for Node.js applications with a built-in load balancer. GitHub (12 июня 2021). Архивировано 4 октября 2025 года.
  52. Aleksander Kasiuk. On problems with threads in node.js - Future Processing (22 апреля 2015). Архивировано 24 апреля 2015 года.
  53. About Node.js. Node.js. Архивировано 24 августа 2025 года.
  54. C++ addons. nodejs.org. Дата обращения: 26 сентября 2020. Архивировано 12 октября 2025 года.
  55. Foundation, Node.js Node.js Foundation (англ.). nodejs.org. Дата обращения: 8 марта 2017. Архивировано 11 октября 2025 года.
  56. nodejs/TSC (англ.). GitHub. Дата обращения: 8 марта 2017. Архивировано 29 августа 2025 года.
  57. Foundation, Node.js Working Groups (англ.). nodejs.org. Дата обращения: 8 марта 2017. Архивировано 27 февраля 2017 года.
  58. Whittaker, Zack. After governance breakdown, Node.js leaders fight for its survival, ZDNet (25 августа 2017). Архивировано 11 октября 2025 года.
  59. tsc-voting-members. Github.com (16 мая 2024). Архивировано 28 сентября 2025 года.

Ссылки