Состоялся релиз Node.js 18, платформы для выполнения сетевых приложений на языке JavaScript. Тут вы узнаете что нового в Node.js 18.0, сам релиз отнесён к веткам с длительным сроком поддержки, но данный статус будет присвоен только в октябре, после проведения стабилизации. Поддержка Node.js 18.x будет осуществляться до апреля 2025 года. Сопровождение прошлой LTS-ветки Node.js 16.x продлится до апреля 2024 года, а позапрошлой LTS-ветки 14.x до апреля 2023 года. Сопровождение LTS-ветки 12.x будет прекращено 30 апреля, а промежуточной ветки Node.js 17.x — 1 июня.
Что нового в Node.js 18.0:
- Движок V8 обновлён до версии 10.1, применяемой в Chromium 101. По сравнению с выпуском Node.js 17.9.0 появилась поддержка таких возможностей, как методы findLast и findLastIndex для поиска элементов относительно конца массива и функции Intl.supportedValuesOf. Улучшен API Intl.Locale. Ускорена инициализация полей классов и приватных методов.
- Включён по умолчанию экспериментальный API fetch(), предназначенный для загрузки ресурсов по сети. Реализация основана на коде из HTTP/1.1 клиента undici и максимально приближена к аналогичному API, предоставляемому в браузерах. В том числе обеспечена поддержка интерфейсов FormData, Headers, Request и Response для манипуляции HTTP-заголовками запросов и ответов.
12345const res = await fetch('https://nodejs.org/api/documentation.json');if (res.ok) {const data = await res.json();console.log(data);} - Добавлена экпериментальная реализация API Web Streams, предоставляющего доступ к потокам данных, полученным по сети. API даёт возможность добавить свои обработчики для работы с данными по мере поступления информации по сети, не дожидаясь загрузки всего файла. В Node.js теперь доступны такие объекты, как ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream и DecompressionStream.
- В число стабильных переведён API
Blob, который позволяет инкапсулировать неизменяемые сырые данные для их безопасного использования в разных рабочих потоках. - В число стабильных переведён API
BroadcastChannel, позволяющий организовать обмен сообщениями в асинхронном режиме в формате «один отправитель — много получателей». - Добавлен экспериментальный модуль node:test для создания и запуска тестов на языке JavaScript, возвращающих результат в формате TAP (Test Anything Protocol).
- Обеспечено формирование готовых сборок для Red Hat Enterprise Linux (RHEL) 8 и других дистрибутивов на базе Glibc 2.28+, включая Debian 10 и Ubuntu 20.04, а также для macOS 10.15+. Из-за проблем со сборкой движка V8 временно прекращено формирование 32-разрядных сборок для Windows.
- Предоставлена экспериментальная возможность сборки исполняемого файла Node.js с выбранными пользователем компонентами, инициализируемыми при запуске. Для определения стартовых компонентов в сборочный скрипт configure добавлена опция
--node-snapshot-main
, например,./configure --node-snapshot-main=marked.js; name node
Платформа 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-приложении, работающем в браузере. При написании приложений для node.js необходимо учитывать специфику событийно-ориентированного программирования, например, вместо выполнения var result = db.query("select..");
с ожиданием завершения работы и последующей обработкой результатов, в Node.js использует принцип асинхронного выполнения, т.е. код трансформируется в db.query("select..", function (result) {обработка результата});
, при котором управление мгновенно перейдёт к дальнейшему коду, а результат запроса будет обработан по мере поступления данных.
Вывод:
В этой новости вы прочитали что нового в новой версии серверного языка JavaScript, Node.js 18.0, думаю вам было интересно, и вы увидели что обновление достаточно не плохое.
Источник: OpenNet.