Bola vydaná verzia Node.js 22.0, platformy pre spúšťanie sieťových aplikácií v jazyku JavaScript. Node.js 22.0 je zaradený do vetiev s dlhodobou podporou, avšak tento status bude pridelený až v októbri, po stabilizácii. Podpora Node.js 22.x bude zaručená do 30. apríla 2027. Podpora predchádzajúcej LTS vetvy Node.js 20.x potrvá do apríla 2026, a predpredchádzajúcej LTS vetvy 18.x do apríla 2025. Podpora medzivrstvy Node.js 21.x bude ukončená 1. júna 2024.
Hlavné vylepšenia:
- Motor V8 bol aktualizovaný na verziu 12.4, použitú v Chromium 124. Zmienky o zmenách v porovnaní s vrstvou Node.js 21, v ktorej bol použitý motor V8 11.8, zahŕňajú:
- Podpora rozšírenia WasmGC, ktoré zjednodušuje portovanie programov písaných v programovacích jazykoch používajúcich garbage collector (Kotlin, PHP, Java a pod.) do WebAssembly. WasmGC pridáva nové typy štruktúr a polí, na ktoré môže byť aplikované nelineárne prideľovanie pamäte.
- Podpora metódy Array.fromAsync(), ktorá v asynchrónnom režime vracia nový exemplár objektu Array, skopírovaný z objektov pripomínajúcich pole, ktoré sú iterovateľné (iterable) alebo asynchrónne iterovateľné (async iterable).
- Podpora metód na prácu s iterátormi, ako sú .map, .filter, .find, .take, .drop, .forEach a .reduce.
- Podpora objektu Set, ktorý definuje kolekciu hodnôt a ponúka metódy na realizáciu typových operácií s množinami, ako sú prieniky, zjednotenia, rozdiely a doplnky.
- Predvolená aktivácia optimalizujúceho JIT kompilátora Maglev, zameraného na rýchlu generáciu vysoko výkonného strojového kódu pre aktívne používaný kód v JavaScripte. Aktivácia Maglevu umožňuje výrazne urýchliť výkon krátkodobých CLI aplikácií, ktoré nevykonávajú dlhé operácie, napríklad čas testu Jetstream sa skráti o 7,5 %, zatiaľ čo test Speedometer o 5 %.
- Zrýchlená práca s prúdmi vďaka zvýšeniu hodnoty možnosti highWaterMark z 16 KB na 65 KB (definuje limit, do ktorého sa vykonáva vyrovnávanie zápisu). Zmena vedie k zvýšenej spotrebe pamäte, preto môže byť aplikáciám, ktoré sú navrhnuté na prácu s obmedzenými objemami RAM, potrebné vrátiť pôvodnú hodnotu prostredníctvom volania setDefaultHighWaterMark().
- Zvýšený výkon API fetch() a test runnera prostredníctvom účinnejšieho vytvárania inštancií AbortSignal. Zlepšený výkon API súvisiacich so synchronnou prácou s súborovými systémami.
- Zavedená experimentálna funkcia na používanie volania „require()“ na načítanie JavaScriptových modulov ESM (ECMAScript Modules) v synchronnom režime. ESM moduly sa používajú v prehliadačoch a nahrádzajú CommonJS moduly špecifické pre Node.js. Na načítanie cez „require()“ musí byť ESM modul vykonávaný v synchronnom režime (bez await na najvyššej úrovni). Podpora sa aktivuje cez prepínač „—experimental-require-module“.
- Pridaná experimentálna možnosť spúšťania skriptov definovaných v súbore package.json pomocou príkazu „—run “.
- Do stabilnej kategórie bola zaradená príkaz „node —watch“ s implementáciou režimu sledovania, ktorý zabezpečuje reštartovanie procesu pri zmene importovaného súboru (napríklad pri vykonaní „node —watch index.js“ bude proces automaticky reštartovaný pri zmene index.js).
- Stabilizovaná vnorená implementácia API WebSocket, umožňujúca používanie WebSocket v režime klienta bez nutnosti inštalácie dodatočných závislostí.
- Pridaná čiastočná podpora API Navigator.
- Podpora formátu kompresie deflate-raw bola pridaná do API Webstreams.
- Do modulu node:fsmodule boli pridané funkcie glob a globSync na porovnávanie súborových ciest podľa vzoru.
- Vylepšené spracovanie nesprávne nakonfigurovaných zásobníkov IPv6. Implementovaný algoritmus Happy Eyeballs na rýchle prechádzanie v prípade problémov s IPv6.
- API util bolo vyhlásené za zastarané.
- Aktualizované verzie závislostí: 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 na 3.8.0, ada 2.7.7 a undici 6.6.0.
Platforma Node.js môže byť použitá na serverovú podporu webových aplikácií, ako aj na vytváranie klasických klientských a serverových sieťových programov. Pre rozšírenie funkčnosti aplikácií pre Node.js bola pripravená veľká kolekcia modulov, v ktorej nájdete moduly s realizáciou. serverov a klientov HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduly na integráciu s rôznymi webovými rámcami, spracovateľov WebSocket a Ajax, konektorov k DBMS (MySQL, PostgreSQL, SQLite, MongoDB), šablónovačov, CSS enginov, implementácií kryptografických algoritmov a systémov autorizácie (OAuth), XML parserov.
Na zabezpečenie spracovania veľkého počtu paralelných požiadaviek Node.js využíva asynchrónny model spúšťania kódu založený na spracovaní udalostí v neblokujúcom režime a určení callback-handlers. Ako spôsoby multiplexovania pripojení sú podporované metódy ako epoll, kqueue, /dev/poll a select. Na multiplexovanie pripojení sa používa knižnica libuv, ktorá je nadstavbou nad libev v systémoch Unix a nad IOCP vo Windows. Na vytvorenie poolu vlákien je použitá knižnica libeio, na vykonávanie DNS požiadaviek v neblokujúcom režime je integrovaný c-ares. Všetky systémové volania, ktoré spôsobujú blokovanie, sa vykonávajú vnútri poolu vlákien a potom, ako aj spracovatelia signálov, odovzdávajú výsledok svojej práce späť cez anonymný kanál (pipe).
Vykonávanie JavaScript kódu je zabezpečené prostredníctvom využitia vyvinutého spoločnosťou Google enginu V8 (dodatočne Microsoft vyvíja variant Node.js s enginom Chakra-Core). V svojej podstate je Node.js podobný rámcom Perl AnyEvent, Ruby Event Machine, Python Twisted a implementácii udalostí v Tcl, ale cyklus spracovania udalostí (event loop) v Node.js je skrytý pred vývojárom a pripomína spracovanie udalostí vo webovej aplikácii bežiacej v prehliadači.
Zdroj: opennet.ru
