Адбыўся рэліз Node.js 22.0, платформы для выканання сеткавых дадаткаў на мове JavaScript. Node.js 22.0 аднесены да галін з працяглым тэрмінам падтрымкі, але гэты статус будзе нададзены толькі ў кастрычніку, пасля правядзення стабілізацыі. Падтрымка Node.js 22.x будзе ажыццяўляцца да 30 красавіка 2027 гады. Суправаджэнне мінулай LTS-галінкі Node.js 20.x працягнецца да красавіка 2026 года, а пазамінулай LTS-галінкі 18.x да красавіка 2025 года. Суправаджэнне прамежкавага адгалінавання Node.js 21.x будзе спынена 1 чэрвеня 2024 года.
Асноўныя паляпшэнні:
- Рухавічок V8 абноўлены да версіі 12.4, якая ўжываецца ў Chromium 124. З змен у параўнанні з галінкай Node.js 21, у якой выкарыстоўваўся рухавічок V8 11.8), адзначаецца:
- Падтрымка пашырэння WasmGC, які спрашчае партаванне ў WebAssembly праграм, напісаных на мовах праграмавання, выкарыстоўвалых зборшчык смецця (Kotlin, PHP, Java і да т.п.). WasmGC дадае новыя тыпы структур і масіваў, для якіх можа прымяняцца нелінейнае вылучэнне памяці.
- Падтрымка метаду Array.fromAsync(), у асінхронным рэжыме які вяртае новы асобнік аб'екта Array, скапіяваны з аб'ектаў, якія нагадваюць масіў, пералічаных (iterable) або асінхронна пералічаных (async iterable).
- Падтрымка метадаў для працы з ітэратарамі, такіх як .map, .filter, .find, .take, .drop, .forEach і .reduce.
- Падтрымка аб'екта Set, які вызначае калекцыю значэнняў і які прапануе метады з рэалізацыяй тыпавых аперацый працы з мноствамі, такіх як скрыжаванні, аб'яднанні, рознасць і дадатак.
- Уключаны па змаўчанні які аптымізуе 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. .
Платформа Node.js можа быць скарыстана як для сервернага суправаджэння працы Web-прыкладанняў, так і для стварэння звычайных кліенцкіх і серверных сеткавых праграм. Для пашырэння функцыянальнасці прыкладанняў для Node.js падрыхтавана вялікая калекцыя модуляў, у якой можна знайсці модулі з рэалізацыяй сервераў і кліентаў HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модулі для інтэграцыі з рознымі web-фрэймворкамі, апрацоўшчыкі WebSocket і Ajax, канектары да СКБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонізатары, CSS-рухавічкі, рэалізацыі 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-дадатку, які працуе ў браўзэры.
Крыніца: opennet.ru
