Node.js растет: 3 основных выпусках, которые изменили игру

Node.js растет: 3 основных выпусках, которые изменили игру

25 июля 2025 г.

Node.js, the undisputed emperor of JavaScript runtimes, has undergone significant architectural and feature-oriented advancements in its recent major releases, specifically versions 22, 23, and 24. These releases represent a deliberate effort by the Node.js Technical Steering Committee to align the runtime environment more closely with evolving ECMAScript specifications, enhance compatibility with modern Web APIs, and improve performance characteristics relevant Для высокопроизводительной, серверной JavaScript Applications.

Основная мотивация этих обновлений состоит в том, чтобы удовлетворить растущий спрос на унифицированное время выполнения, которое поддерживает как традиционные рабочие нагрузки на сервере, так и новые модели приложений, которые пользуются клиентскими возможностями, такими как нативное коммуникация WebSocket, структурированное клонирование и типичные интерфейсы потока. С этой целью три последовательных выпуска представляют несколько функций, ранее ограниченных средами на основе браузеров, такими какURLPatternинтерфейс,structuredCloneфункция и улучшенные примитивы потока. Эти усовершенствования дополняются оптимизацией в базовом двигателе V8, что обеспечивает более быстрые пути выполнения с помощью механизмов, таких как справедливое время (JIT), улучшения компиляции и снижение задержки запуска.

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

В этой статье представлена техническое исследование наиболее важных функций, представленных в node.js версии 22, 23 и 24. Акцент делается на изменениях на языковом уровне, модификации поведения во время выполнения и инфраструктурных улучшениях, относящихся к эффективности, безопасности и соответствию стандартам.

Node.js V22: Фондовые усовершенствования и оптимизации времени выполнения

Node.js v22, выпущенный в апреле 2024 года, вводит несколько улучшений, которые в совокупности в совокупности улучшают соответствие языка, производительность времени выполнения и опыт разработчиков. Этот выпуск знаменует собой преднамеренную эволюцию платформы в отношении более широкой совместимости с недавними функциями Ecmascript, и в то же время продолжает совершенствовать внутреннее системное поведение и модули, ориентированные на пользователя. По состоянию на октябрь 2024 года V22 был назначен в качестве долгосрочной поддержки (LTS).

A. Обновление двигателя JavaScript: V8 12.4 и интеграция Maglev JIT

Наиболее важным обновлением в node.js v22 является интеграцияV8 Версия 12.4, базовый двигатель JavaScript. Это обновление представляет поддержку современных функций Ecmascript, включаяArray.fromAsync()и новые теоретичные операции наSetобъекты Эти дополнения облегчают улучшенную производительность и большую выразительность для асинхронных и функциональных задач программирования.

Например,Array.fromAsync()Функция обеспечивает асинхронное сбор и преобразование итерационных или асинхронных итерационных значений:

async function* fetchData() {
  yield* [Promise.resolve(1), Promise.resolve(2), Promise.resolve(3)];
}

const result = await Array.fromAsync(fetchData(), async (x) => x * 2);
// result: [2, 4, 6]

Установить операции, такие какunionВintersection, иdifferenceтеперь непосредственно поддерживаются во время выполнения:

const a = new Set([1, 2, 3]);
const b = new Set([3, 4, 5]);

const union = a.union(b);         // Set {1, 2, 3, 4, 5}
const intersection = a.intersection(b); // Set {3}
const difference = a.difference(b);     // Set {1, 2}

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

B. Интеграция клиента Native WebSocket

Версия 22 включаетПринципиальная реализация клиента WebSocketдоступный через глобальныйWebSocketОбъект, выравнивающий узлы. Это устраняет необходимость в сторонних библиотеках, таких какwsДля основных вариантов использования веб -сокетов:

const socket = new WebSocket('wss://echo.websocket.org');

socket.onopen = () => {
  socket.send('Hello from Node.js 22');
};

socket.onmessage = (event) => {
  console.log('Received:', event.data);
};

Присутствие нативной поддержки WebSocket упрощает интеграцию с API на основе WebSocket и способствует согласованности между кодом JavaScript на стороне сервера.

C. Усовершенствованный API файловой системы: поддержка глобуса вfsМодуль

Аnode:fsМодуль теперь включает в себя встроенную поддержку для сопоставления шаблонов файлов на основе глобуса черезfs.glob()иfs.globSync()функции. Эти функции обеспечивают рекурсивное и склонное к сведению трансляцию каталога, не требуя внешних модулей.

import { globSync } from 'node:fs';

const files = globSync('src/**/*.test.js');

Это улучшение снижает накладные расходы сторонних зависимостей и обеспечивает первоклассную поддержку для общей работы файловой системы в сборе инструментов сборки и тестовых бегунов.

D. Стабилизированный режим наблюдения для автоматизации разработки

Ранее отмечен как экспериментальный,Смотреть режимтеперь стабилен в node.js v22. Это позволяет процессу node.js автоматически перезапустить при обнаружении изменений в указанных файлах или каталогах. Эта функция доступна через--watchфлаг:

node --watch app.js

При желании--watch-pathФлаг может быть использован для ограничения прицелов часа в конкретных каталогах:

node --watch-path=src --watch app.js

Эта функция снижает необходимость в внешних инструментах мониторинга процессов, таких какnodemonи способствует более интегрированному опыту разработки.

E. Stream System и AbortController улучшения

По умолчаниюhighWaterMarkПорог для потоков был увеличен с 16 киб до 64 киб. Это изменение сводит к минимуму частоту сигналов обратного давления в высокопроизводительных трубопроводах, что приводит к измеримым повышению производительности при употреблении и преобразовании рабочих нагрузок.

Одновременно стоимость строительстваAbortSignalПримеры были уменьшены. Это актуально в сценариях канкуляции запросов, где контроллеры прерванных экземпляров создаются по запросу или единице задачи.

F. Улучшения модулей обещания и полезности

Node.js V22 представляетPromise.withResolvers(), статический метод, который отделяет создание перспектива от механики разрешения. Эта функция упрощает обработку обещаний извне разрешенных и повышает ясность кода в асинхронных управляющих потоках:

const { promise, resolve, reject } = Promise.withResolvers();

setTimeout(() => resolve('Done'), 1000);

const result = await promise;

Аnode:utilМодуль теперь включает в себя поддержку стиля консоли через последовательности ANSI Escape. Это позволяет инструментам разработки производить журналы с цветовой кодировкой, не полагаясь на сторонние библиотеки стиля:

import { formatWithOptions, inspect } from 'node:util';

console.log(formatWithOptions({ colors: true }, '%O', { key: 'value' }));

Node.js Версия 23: Эргономика разработчика и развивающаяся языковая поддержка.

Выпущенный в октябре 2024 года, Node.js версия 23 основана на основе, установленном его предшественником, сосредоточившись на улучшении эргономики разработчика, расширении возможностей местного языка и уточнении поведения времени выполнения, чтобы лучше поддерживать современные рабочие процессы разработки. В этом выпуске поддерживается соответствие ECMASCRIPT, представленное в V22, внедряя несколько экспериментальных и стабилизированных функций, предназначенных для облегчения более плавной интеграции современных приложений JavaScript и TypeScript.

A. Обеспечение по умолчаниюrequire()Поддержка модулей ES

Одним из основных изменений в node.js 23 является активацияrequire()-Сы на основе загрузки модулей ECMASCRIPT (ESM) по умолчанию. До этого выпуска, требуя от ESM в контекстах CommonJS потребовалось использование--experimental-require-moduleфлаг. В V23 эта функциональность становится включенной из коробки, упрощая совместимость между CommonJS и кодовыми базами ESM.

Несмотря на способность по умолчанию, эта функция остаетсяэкспериментальный, излучение предупреждения об испаке при первом призыве, чтобы поощрять миграцию в сторону родногоimportсинтаксис. Разработчики могут отключить эту функцию через--no-experimental-require-moduleфлаг при необходимости.

// Example: requiring an ES module in CommonJS
const esmModule = require('./module.mjs');

Эта возможность облегчает постепенную стратегии миграции и интеграцию устаревшего кода, не требуя массового рефакторирования.

B. Нативное выполнение типовой

Примечательное новшество в Node.js 23.6 (выпущено в марте 2025 г.)Экспериментальная собственная поддержка выполнения файлов типовойбез предварительной транспиляции. Эта функция разрешает прямое выполнение.tsФайлы во время выполнения, выполняя только синтаксическую ливню аннотаций типа, а не полную компиляцию.

node example.ts

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

C. Интеграция API веб -хранилища (экспериментальная)

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

localStorage.setItem('token', 'abc123');
const token = localStorage.getItem('token');

Доступ к этим API требует явного включения через флаги функций и подлежит продолжающейся уточнению.

D. Уточнения для тестового бегуна node.js

ВстроенныйNode.js Test Runnerиспытывает усовершенствования в V23, в частности, включениеПоддержка глобусаДля указания тестовых файлов. Это позволяет более кратко и гибко выполнять тестовые команды, улучшая автоматизацию тестов и непрерывные трубопроводы интеграции.

node --test "tests/**/*.test.js"

Такие улучшения снижают зависимость от сторонних тестовых рамок для простых вариантов использования и повышения устойчивости нативного инструмента.

E. Уничтожение 32-разрядной поддержки Windows

Отражая развивающиеся приоритеты платформы, node.js v23 прекращает поддержку32-битная архитектура WindowsПолем Это изменение мотивировано снижением спроса и желанием оптимизировать техническое обслуживание и построение инфраструктуры.

F. openssl двигатель и обновления модели безопасности

Node.js 23 выравнивается с криптографической библиотекой Upstream OpenSSL 3Уничтожая варианты на основе двигателяи удаление экспериментальной политики. Эти корректировки способствуют соблюдению современных криптографических лучших практик и упрощают модель безопасности времени выполнения.

Node.js Версия 24: Добавление моделей совместимости веб -сайта и безопасности

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

A. Обновление двигателя V8 до версии 13.6: Функции языка и сайте

Node.js 24 интегрируетV8 Версия 13.6, представляя несколько функций Ecmascript, включая:

  • Float16Array: Типированный массив для 16-битных чисел с плавающей запятой, полезный в чувствительных к производительности численных вычислениях.
  • RegExp.escape(): Утилита, чтобы безопасно избежать строк для использования в рамках регулярных выражений.
  • Error.isError(): Статический метод, чтобы определить, является ли объект экземпляром ошибки.
  • Webassembly Memory64 Поддержка: Включение 64-битной адресации памяти в модулях Webassembly.
  • Поддержка дляusingиawait usingДекларации детерминированного управления ресурсами.

Пример использованияRegExp.escape():

const escaped = RegExp.escape('Hello. (How are you?)');
// escaped: Hello\. \(How are you\?\)
const regex = new RegExp(escaped);
console.log(regex.test('Hello. (How are you?)')); // true

B. Расширенная поддержка Native Web API

Node.js 24 продолжает тенденцию включатьБраузер-родные веб-API:

  • АURLPatternAPI в настоящее время доступен по всему миру без импорта, позволяя сопоставлять шаблоны на компонентах URL в соответствии со стандартным синтаксисом шаблона URL:
const pattern = new URLPattern('/users/:id');
const result = pattern.exec('/users/42');
console.log(result.pathname.groups.id); // 42
  • Нативные реализацииReadableStreamВWritableStream, иTransformStreamПоддержите спецификацию веб -потоков, облегчая композиционную и совместимую обработку потока.
  • АstructuredClone()Функция обеспечивается глобально для выполнения глубокого клонирования сложных структур данных, в соответствии с средой браузера.
  • ВведениеMessagePortоблегчает передачу сообщения и общение рабочей потока.

C. Стабилизация модели безопасности и разрешения

Амодель разрешенияподвергается стабилизации в node.js 24, предоставляя разработчикам гранулированный контроль над возможностями выполнения. Флаг командной строки упрощает--permissionЧтобы ограничить файловую систему, переменные среды и доступ к сети:

node --permission=fs,env app.js

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

D. Тестовые бегуны и разработчики улучшаются

ВстроенныйNode.js Test Runnerтеперь поддерживаетАвтоматическое ожидание подтестов, уменьшение шаблона и потенциал для асинхронных ошибок:

test('outer', (t) => {
  t.test('inner', () => {
    // No explicit await required
  });
});

Другие улучшения включают в себя более надежные варианты CLI и лучшую интеграцию с современными парадигмами тестирования JavaScript.

E. Усовершенствования клиентов HTTP и улучшения инструментов

Node.js 24 обновляет его внутренний клиент HTTP дляUndici версия 7Обеспечивая улучшенную поддержку HTTP/2, перехватчики запросов для кэширования и повторных попыток, усовершенствования DNS и потоковых возможностей WebSocket.

Интегрированный менеджер пакетов,npm, обновлен до версии 11, обеспечивая более быструю установку, улучшенный аудит безопасности и более предсказуемое поведение выполнения скрипта.

Ф. Экспериментальные особенности

  • Нативная поддержка для.envфайлы через новыйloadEnvFile()Метод вnode:processМодуль облегчает конфигурацию среды без внешних зависимостей.
  • Продолжающиеся улучшения вWebassemblyи поддержка протокола HTTP/3 дальнейшие возможности расширения Node.js возможностей в развивающихся сетевых технологиях.

Проспективные функции в предстоящих выпусках node.js

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

A. Полная совместимость нативного модуля Ecmascript

В то время как Node.js 22 и 23 ввели экспериментальную поддержку для загрузки модулей Ecmascript черезrequire()Функциональная, полная и бесшовная взаимодействие между CommonJS и модулями Ecmascript остается областью активного исследования. Будущие выпуски направлены на то, чтобы устранить унаследованные предостережения, уменьшить накладные расходы в смешанных модульных средах и стандартизировать стратегии разрешения модулей.

B. Расширенное нативное выполнение TypeScript

Ожидается, что последующие выпуски, основанные на первоначальной поддержке нативного типографии, введенной в V23.6, расширят охват функции, включая поддержку декораторов, перечисления, псевдонимов пути и функции системы расширенного типа. Это позволило бы использовать приложения TypeScript работать неперечисленными в производственных средах с гарантиями производительности и корректности.

C. Усовершенствованное покрытие веб -API

Включение веб -API, таких какWeb StorageиWeb StreamsВ недавних выпусках отмечается сдвиг парадигмы в сторону полной паритета веб -платформы. Ожидается, что будущие версии расширят это покрытие, чтобы включить:

  • АFetch APIс расширенными http/3 и кэширующими возможностями.
  • WebrtcПоддержка одноранговых коммуникаций в реальном времени.
  • BroadcastChannelи дополнительные интерфейсы, передающие сообщения для рабочих потоков.

Эти функции дополнительно объединят модели программирования клиентов и сервера JavaScript.

D. Усовершенствованные модели безопасности и песочницы

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

E. улучшения производительности и наблюдаемости

Продолжаются оптимизация двигателя V8, трубопровода компилятора JIT и нативных диагностических инструментов. К ним относятся:

  • Улучшение запуска и устойчивого времени выполнения.
  • Усовершенствованные API профилирования для лучшего мониторинга ресурсов.
  • Интеграция распределенных стандартов отслеживания для поддержки архитектур микросервисов.

Заключение

Этот анализ Node.js Versions 22, 23 и 24 выявил значительные достижения в соответствии с языком, производительностью времени выполнения и моделей безопасности. Версия 22 представила основополагающие улучшения, включая обновление двигателя V8 12.4, поддержку клиента WebSocket и расширенные возможности файловой системы. Версия 23 была сосредоточена на эргономике разработчика, позволяя экспериментальному взаимодействию модуля ECMASCRIPrequire(), добавление собственного выполнения типографии и интеграция API веб -хранилища. Версия 24 дополнительно расширила возможности платформы с помощью двигателя V8 13.6, расширенной поддержки нативного веб -API, стабилизированной модели разрешений и улучшений в основных инструментах, таких как тестовый бегун и клиент HTTP.

Эти кумулятивные изменения демонстрируют преднамеренный прогресс в направлении объединения JavaScript на стороне сервера с современными веб-стандартами и парадигмами безопасности. Особенности, представленные в этих выпусках, предоставляют разработчикам повышенную выразительность, улучшенную производительность и более тонкий контроль над поведением времени выполнения. Будущие направления указывают на дальнейшее повышение взаимодействия модулей, расширенное принятие веб -API и утонченные механизмы безопасности.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE