Galima serverio JavaScript platforma Node.js 21.0

Состоялся релиз Node.js 21.0, платформы для выполнения сетевых приложений на языке JavaScript. Поддержка ветки Node.js 21.0 будет осуществляться в течение 6 месяцев. В ближайшие дни будет завершена стабилизация ветки Node.js 20, которая получит статус LTS и будет поддерживаться до апреля 2026 года. Сопровождение прошлой LTS-ветки Node.js 18.0 продлится до сентября 2025 года, а позапрошлой LTS-ветки 16.0 до апреля 2024 года.

Pagrindiniai patobulinimai:

  • Объявлен стабильным API Fetch, предназначенный для загрузки ресурсов по сети и упрощающий написание универсального JavaScript-кода, пригодного для работы на стороне сервера и клиента. Реализация основана на коде из HTTP/1.1 клиента undici и максимально приближена к аналогичному API, предоставляемому в браузерах. API включает в себя метод fetch() и объекты Headers. Request и Response, представляющие HTTP-заголовки, запрос и ответ. const res = await fetch(‘https://nodejs.org/api/documentation.json’); if (res.ok) { const data = await res.json(); console.log(data); }
  • Стабилизирована поддержка API WebStreams, предоставляющего доступ к потокам данных, полученным по сети. API даёт возможность добавить свои обработчики, работающие с данными по мере поступления информации по сети, не дожидаясь загрузки всего файла. В Node.js доступны такие объекты, как ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream и DecompressionStream.
  • Добавлена экспериментальная реализация клиента WebSocket, совместимая с браузерами. Для включения поддержки WebSocket предусмотрен флаг «—experimental-websocket».
  • Добавлен экспериментальный режим использования по умолчанию реализации JavaScript-модулей ESM (ECMAScript Modules, применяется в модулях для браузеров) вместо CommonJS (специфичен для Node.js). Изменение не затрагивает модули, формат которых явно определён через поле «type» в package.json, задан через флаг «—input-type» или очевиден в силу расширения файла (.mjs для ESM, .cjs для CommonJS). При этом модули, которые явно не определены как CommonJS (например, имеют расширение «.js»), при включении нового режима будут восприниматься как модули ESM. Для активации новых настроек модулей предложен флаг «—experimental-default-type».
  • Движок V8 обновлён до версии 11.8, применяемой в Chromium 118, в котором появилась поддержка метода ArrayBuffer.prototype.transfer, возможности группировки массивов (метод groupBy) и WebAssembly-инструкций обработки констант (i32.add, i32.sub, i32.mul, i64.add, i64.sub и i64.mul).
  • Прекращена поддержка обработчика globalPreload, вместо которого для настройки модулей следует использовать вызовы register и initialize.
  • В функцию fs.writeFile добавлена опция «flush» для принудительного сброса данных на накопитель после каждой операции записи.
  • Повышена производительность кода, связанного с разбором URL, API fetch, streams, node:fs и HTTP.
  • Добавлен глобальный объект navigator. Например, для получения данных о числе ядер CPU можно использовать свойство navigator.hardwareConcurrency.
  • В параметре «—test» добавлена поддержка glob-масок для выбора запускаемых тестов (например, можно указать «—test **/*.test.js.»).
  • Обновлены входящие в комплект пакетный менеджер npm 10.2.0 и парсер llhttp 9.1.2.
  • Прекращена поддержка Visual Studio 2019 и версий macOS старее 11.0.

Node.js platforma gali būti naudojama tiek žiniatinklio programų serverių priežiūrai, tiek įprastų klientų ir serverių tinklo programoms kurti. Aplikacijų, skirtų Node.js, funkcionalumui praplėsti, parengta didelė modulių kolekcija, kurioje galima rasti modulių su HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 serverių ir klientų diegimu, modulių integravimui su įvairiomis žiniatinklio sistemomis, „WebSocket“ ir „Ajax“ tvarkytuvais, DBMS jungtimis (MySQL, PostgreSQL, SQLite, MongoDB), šablonų varikliais, CSS varikliais, kriptovaliutų algoritmų diegimu ir autorizacijos sistemomis (OAuth), XML analizatoriais.

Siekdama užtikrinti daugelio lygiagrečių užklausų apdorojimą, Node.js naudoja asinchroninio kodo vykdymo modelį, pagrįstą neblokuojančiu įvykių tvarkymu ir atgalinio skambučio tvarkyklių apibrėžimu. Palaikomi jungčių tankinimo metodai yra epoll, kqueue, /dev/poll ir select. Ryšių tankinimui naudojama libuv biblioteka, kuri yra libev priedas Unix sistemose ir IOCP Windows sistemoje. Libeio biblioteka naudojama gijų telkiniui sukurti, o c-ares integruota DNS užklausoms atlikti neblokuojančiu režimu. Visi sistemos iškvietimai, sukeliantys blokavimą, yra vykdomi gijų telkinyje, o tada, kaip ir signalų tvarkytojai, perduoda savo darbo rezultatą atgal per neįvardytą vamzdį (vamzdį). „JavaScript“ kodo vykdymas užtikrinamas naudojant „Google“ sukurtą V8 variklį (be to, „Microsoft“ kuria „Node.js“ versiją su „Chakra-Core“ varikliu).

Iš esmės Node.js yra panašus į Perl AnyEvent, Ruby Event Machine, Python Twisted sistemas ir Tcl įvykių įgyvendinimą, tačiau Node.js įvykių ciklas yra paslėptas nuo kūrėjo ir primena įvykių tvarkymą veikiančioje žiniatinklio programoje. naršyklėje. Rašydami node.js programas, turite atsižvelgti į įvykiais pagrįsto programavimo specifiką, pavyzdžiui, užuot darę "var result = db.query("select..");" su laukimu, kol bus baigtas darbas ir vėliau apdorojami rezultatai, Node.js naudoja asinchroninio vykdymo principą, t.y. kodas paverčiamas į "db.query("select..", funkcija (rezultatas) {rezultato apdorojimas});", kurioje valdymas akimirksniu pereis prie tolimesnio kodo, o užklausos rezultatas bus apdorojamas gavus duomenis.

Šaltinis: opennet.ru

Добавить комментарий