Состоялся релиз Node.js 24.0.0, платформы для выполнения сетевых приложений на языке JavaScript. Node.js 24.0 отнесён к веткам с длительным сроком поддержки, но данный статус будет присвоен только в октябре, после проведения стабилизации. Поддержка Node.js 24.x будет осуществляться до 30 апреля 2028 года. Сопровождение прошлой LTS-ветки Node.js 22.x продлится до апреля 2027 года, а позапрошлой LTS-ветки 20.x до апреля 2026 года. Сопровождение LTS-ветки 18.x прекращено 30 апреля 2025 года, промежуточной ветки Node.js 23.x будет прекращено 1 июня 2025 года.
Основные улучшения:
- В API AsyncLocalStorage по умолчанию задействован класс AsyncContextFrame, который помечен стабильным. AsyncContextFrame реализует более эффективный механизм отслеживания асинхронного контекста, позволяющий заметно повысить производительность.
- API URLPattern теперь доступен в виде глобального объекта, который можно использовать без явного импортирования. URLPattern предоставляет возможности для проверки соответствия URL определённому шаблону, что, например может применяться для разбора ссылок.
- Улучшен и стабилизирован механизм Permission Model, позволяющий ограничить доступ к определённым ресурсам в процессе исполнения (например, можно запретить создание дочерних процессов, ограничить доступ на запись или чтение к определённым частям ФС, отключить дополнения). Вместо экспериментального флага “–experimental-permission” для включения Permission Model теперь можно использовать флаг “–permission”.
- Расширены возможности модуля node:test (test_runner), предназначенного для создания и запуска тестов на языке JavaScript, возвращающих результат в формате TAP (Test Anything Protocol). Модуль теперь автоматически ожидает завершения вложенных тестов без необходимости использования await.
- HTTP-клиент undici обновлён до ветки 7.x, в которой повышена производительность и добавлена поддержка новых возможностей HTTP.
- Движок V8 обновлён до версии 13.6, применяемой в Chromium 136. Из новых возможностей по сравнению с прошлым выпуском Node.js отмечена
поддержка типизированных массивов Float16Array, ручного управления ресурсами, метода RegExp.escape (экранирование строк для RegExp), 64-разрядных указателей (Memory64) в WebAssembly, метода Error.isError. - Пакетный менеджер NPM обновлён до версии 11.
- Прекращена поддержка компилятора MSVC. Для компиляции на платформе Windows необходимо использовать ClangCL.
Платформа Node.js может быть использована как для серверного сопровождения работы Web-приложений, так и для создания обычных клиентских и серверных сетевых программ. Для расширения функциональности приложений для Node.js подготовлена большая коллекция модулей, в которой можно найти модули с реализацией серверов и клиентов HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модули для интеграции с различными web-фреймворками, обработчики WebSocket и Ajax, коннекторы к СУБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонизаторы, CSS-движки, реализации криптоалгоритмов и систем авторизации (OAuth), XML-парсеры.
Для обработки большого числа параллельных запросов Node.js задействует асинхронную модель запуска кода, основанную на обработке событий в неблокирующем режиме и определении callback-обработчиков. В качестве способов мультиплексирования соединений поддерживаются такие методы, как epoll, kqueue, /dev/poll и select. Для мультиплексирования соединений используется библиотека libuv, которая является надстройкой над libev в системах Unix и над IOCP в Windows. Для создания пула потоков (thread pool) задействована библиотека libeio, для выполнения DNS-запросов в неблокирующем режиме интегрирован c-ares. Все системные вызовы, вызывающие блокирование, выполняются внутри пула потоков и затем, как и обработчики сигналов, передают результат своей работы обратно через неименованный канал (pipe).
Выполнение JavaScript-кода обеспечивается через задействование разработанного компанией Google движка V8 (дополнительно Microsoft развивает вариант Node.js с движком Chakra-Core). По своей сути Node.js похож на фреймворки Perl AnyEvent, Ruby Event Machine, Python Twisted и реализацию событий в Tcl, но цикл обработки событий (event loop) в Node.js скрыт от разработчика и напоминает обработку событий в web-приложении, работающем в браузере.