24 апреля 2024 года состоялся релиз JavaScript-платформы Node.js 22. Платформа Node.js может быть использована как для серверного сопровождения работы веб-приложений, так и для создания обычных клиентских и серверных сетевых программ.
Для расширения функциональности приложений для Node.js подготовлена коллекция модулей, в которой можно найти модули с реализацией серверов и клиентов HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модули для интеграции с различными web-фреймворками, обработчики WebSocket и Ajax, коннекторы к СУБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонизаторы, CSS-движки, реализации криптоалгоритмов и систем авторизации (OAuth), XML-парсеры.
Версия проекта Node.js 22 отнесена к веткам с длительным сроком поддержки (LTS), но этот статус будет присвоен только в октябре, после проведения стабилизации. Поддержка Node.js 22.x будет осуществляться до 30 апреля 2027 года. Сопровождение прошлой LTS-ветки Node.js 20.x продлится до апреля 2026 года, а позапрошлой LTS-ветки 18.x до апреля 2025 года. Сопровождение промежуточной ветки Node.js 21.x будет прекращено 1 июня 2024 года. «>получит в октябре статус с длительным сроком поддержки (LTS), после проведения стабилизации кода. Поддержка Node.js 22.x будет осуществляться до 30 апреля 2027 года. Сопровождение LTS-ветки Node.js 20.x продлится до апреля 2026 года, а LTS-ветки 18.x до апреля 2025 года. Сопровождение промежуточной ветки Node.js 21.x будет прекращено 1 июня 2024 года.
По данным OpenNET, основные изменения и дополнения в Node.js 22:
движок V8 обновлён до версии 12.4, применяемой в Chromium 124;
включён по умолчанию оптимизирующий JIT-компилятор Maglev, нацеленный на быструю генерацию высокопроизводительного машинного кода для активно используемого кода на JavaScript. Включение Maglev позволяет заметно ускорить работу короткоживущий CLI-приложений, не выполняющих длительных операций, например, время прохождения теста Jetstrea сокращается на 7.5%, а теста Speedometer на 5%;
ускорена работа с потоками за счёт увеличения значения опции highWaterMark с 16 KB до 65 KB (определяет лимит, до которого выполняется буферизация записи). Изменение приводит к увеличению потребления памяти, поэтому приложениям, рассчитанным на работу с ограниченным объёмом ОЗУ, возможно потребуется вернуть старое значение через вызов setDefaultHighWaterMark();
повышена производительность API fetch() и test runner за счёт повышения эффективности создания экземпляров AbortSignal. Повышена производительность API, связанных с синхронной работой с файловыми системами;
предоставлена экспериментальная возможность использования вызова «require()» для загрузки JavaScript-модулей ESM (ECMAScript Modules) в синхронном режиме. ESM-модули применяются в браузерах и идут на смену модулям CommonJS, специфичным для Node.js. Для загрузки через «require()» ESM-модуль должен выполняться в синхронном режиме (без await на верхнем уровне). Поддержка включается через флаг «—experimental-require-module»;
добавлена экспериментальная возможность запуска скриптов, определённых в файле package.json, используя команду «—run «;
в категорию стабильных переведена команда «node —watch» с реализацией режима наблюдения, обеспечивающего перезапуск процесса при изменении импортированного файла (например, в случае выполнения «node —watch index.js» процесс будет автоматически перезапущен при изменении index.js);
стабилизирована встроенная реализация API WebSocket, позволяющего использовать WebSocket в режиме клиента без установки дополнительных зависимостей;
добавлена частичная поддержка API Navigator;
в API Webstreams добавлена поддержка формата сжатия deflate-raw;
в модуль node:fsmodule добавлены функции glob и globSync для сопоставления файловых путей по образцу;
улучшена обработка некорректно настроенных стеков IPv6. Реализован алгоритм Happy Eyeballs для быстрого отката в случае проблем с работой IPv6;
объявлен устаревшим API util;
обновлены версии зависимостей: npm 10.5.1, libuv 1.48.0, simdutf 5.2.3, c-ares 1.28.1, zlib 1.3.0.1-motley-24c07df, simdjson to 3.8.0, ada 2.7.7 и undici 6.6.0.
Источник: habr.com