Состоялся запуск Node.js 23.0.0, платформы, предназначенной для разработки сетевых приложений на JavaScript. Эта версия относится к промежуточным релизам, которые будут получать обновления в течение 7 месяцев, до июня 2025 года. В скором времени завершится стабилизация текущей версии Node.js 22, которая 29 октября станет LTS и будет поддерживаться до апреля 2027 года. Поддержка предыдущих LTS-версий Node.js 20.x и 18.x продлится до апреля 2026 и 2025 годов соответственно.
Ключевые обновления:
- Введена экспериментальная поддержка TypeScript, позволяющего явное указание типов. Данная функция активируется с помощью опций "--experimental-strip-types" и "--experimental-transform-types". Первая опция очищает типовые аннотации, не проводя проверку типов, а вторая конвертирует некоторые конструкции TypeScript, такие как перечисления и пространства имен, в JavaScript.
- По умолчанию добавлена возможность использовать вызов "require()" для синхронной загрузки ESM (ECMAScript Modules) в Node.js. ESM, который является стандартом для модулей в браузерах, заменяет CommonJS, специфичные для Node.js. Чтобы загрузить ESM через "require()", модуль должен работать синхронно (без await на верхнем уровне).
- Автоматическое определение ESM-модулей теперь возможно для файлов без расширения или с расширением ".js". Ранее такие файлы интерпретировались как модули CommonJS, если не было явного указания типа в package.json. Теперь, если тип файла не определен, сначала производится попытка загрузки как CommonJS, а при неудаче — как ESM.
- Экспериментальная реализация API Web Storage для хранения данных в формате ключ/значение (localStorage и sessionStorage) также была добавлена. Для активации Web Storage требуется запуск с флагом "--experimental-webstorage" и указание файла хранилища.
- Введен экспериментальный API SQLite, позволяющий взаимодействовать с базами данных на SQL и хранящимися с использованием SQLite. База данных может храниться как в файле, так и в памяти, указав ":memory:". API Web Storage реализован поверх SQLite, добавляя его в зависимости Node.js.
- Стала стабильной команда "node --run" для запуска скриптов из package.json.
- Реализована опциональная функция кэширования скомпилированного кода на диске для повышения скорости загрузки модулей. Кэширование активируется переменной окружения NODE_COMPILE_CACHE, обеспечивая большую производительность по сравнению с аналогичными решениями.
- Оптимизирован объект Buffer, что значительно повысило эффективность методов Buffer.copy() и Buffer.write().
- Улучшена производительность модуля node, сокращено количество вызовов кода на C++.
- Движок V8 обновлен до версии 12.9, используемой в Chromium 129.
- Удалена поддержка 32-разрядных версий Windows.
- Из-за внедрения новых возможностей C++20 повышены требования к компилятору GCC, теперь необходима как минимум версия 12.
Node.js подходит как для серверной обработки веб-приложений, так и для создания клиентских и серверных сетевых решений. Для расширения функционала доступны многочисленные модули, обеспечивающие реализацию различных серверов и клиентов (HTTP, SMTP, XMPP и т.д.), а также поддержку интеграции с популярными веб-фреймворками и базами данных.
Node.js использует асинхронную модель обработки, основанную на событийной модели и callback-функциях, что позволяет эффективно обрабатывать множество параллельных запросов. В качестве методов мультиплексирования соединений поддерживаются epoll, kqueue, /dev/poll и select, используя библиотеку libuv.
Исполнение JavaScript-кода осуществляется с помощью движка V8, разработанного Google. Node.js сравним с Perl AnyEvent, Ruby Event Machine, Python Twisted, но предлагает скрытую от разработчиков модель обработки событий, что делает его похожим на работу веб-приложений в браузере.