Byl vydán Node.js 22.0, platforma pro spouštění síťových aplikací v JavaScriptu. Node.js 22.0 je klasifikován jako dlouhodobá podpůrná větev, ale tento status bude přidělen až v říjnu, po stabilizaci. Node.js 22.x bude podporován do 30. dubna 2027. Údržba předchozí LTS větve Node.js 20.x potrvá do dubna 2026 a předloni LTS větve 18.x do dubna 2025. Pracovní větev Node.js 21.x bude ukončena 1. června 2024.
Hlavní vylepšení:
- Motor V8 byl aktualizován na verzi 12.4 používanou v Chromium 124. Mezi změnami oproti větvi Node.js 21, která používala motor V8 11.8, je třeba poznamenat:
- Podpora rozšíření WasmGC, které zjednodušuje portování programů napsaných v programovacích jazycích, které používají garbage collector (Kotlin, PHP, Java atd.) do WebAssembly. WasmGC přidává nové typy struktur a polí, které mohou využívat nelineární alokaci paměti.
- Podpora metody Array.fromAsync(), která asynchronně vrací novou instanci objektu Array zkopírovaného z objektu podobného poli, iterovatelného nebo asynchronního iterovatelného objektu.
- Podpora metod iterátoru, jako jsou .map, .filter, .find, .take, .drop, .forEach a .reduce.
- Podpora pro objekt Set, který definuje kolekci hodnot a nabízí metody, které implementují běžné operace sady, jako je průnik, sjednocení, rozdíl a sčítání.
- Kompilátor JIT optimalizující Maglev je ve výchozím nastavení povolen a je zaměřen na rychlé generování vysoce výkonného strojového kódu pro hojně používaný kód JavaScript. Povolení Maglev může výrazně zrychlit aplikace CLI s krátkou životností, které neprovádějí dlouhodobé operace, například čas na dokončení testu Jetstrea se zkrátí o 7.5 % a testu Speedometer o 5 %.
- Práce se streamy byla urychlena zvýšením hodnoty možnosti highWaterMark z 16 KB na 65 KB (definuje limit, do kterého se záznam ukládá do vyrovnávací paměti). Změna má za následek zvýšenou spotřebu paměti, takže aplikace navržené tak, aby běžely na omezené paměti RAM, se možná bude muset vrátit ke staré hodnotě pomocí volání setDefaultHighWaterMark().
- Vylepšený výkon rozhraní API fetch() a testovacího běhu díky zefektivnění konkretizace AbortSignal. Byl vylepšen výkon rozhraní API souvisejících se synchronní prací se systémy souborů.
- Byla poskytnuta experimentální funkce pro použití volání "require()" k načtení modulů ESM JavaScriptu (ECMAScript Modules) v synchronním režimu. Moduly ESM se používají v prohlížečích a nahrazují moduly CommonJS specifické pro Node.js. Pro načtení pomocí "require()" musí být modul ESM spuštěn v synchronním režimu (bez čekání na nejvyšší úrovni). Podpora je povolena pomocí příznaku „--experimental-require-module“.
- Přidána experimentální schopnost spouštět skripty definované v souboru package.json pomocí příkazu "--run". "
- Příkaz „node –watch“ byl přesunut do kategorie stable s implementací režimu sledování, který zajišťuje restart procesu při změně importovaného souboru (například pokud je spuštěn „node –watch index.js“, proces bude automaticky restartován, když se změní index.js).
- Nativní implementace rozhraní WebSocket API byla stabilizována, což umožňuje použití WebSocket v klientském režimu bez instalace dalších závislostí.
- Přidána částečná podpora pro Navigator API.
- Webstreams API přidalo podporu pro kompresní formát deflate-raw.
- Do node:fsmodule byly přidány funkce glob a globSync pro porovnávání vzorů cest k souborům.
- Vylepšené zacházení s nesprávně nakonfigurovanými zásobníky IPv6. Implementován algoritmus Happy Eyeballs pro rychlé vrácení zpět v případě problémů s provozem IPv6.
- Rozhraní util API bylo zastaralé.
- Aktualizované verze 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 až 3.8.0, ada 2.7.7 .
Platformu Node.js lze použít jak pro podporu webových aplikací na straně serveru, tak pro tvorbu standardních síťových programů na straně klienta a serveru. Pro rozšíření funkcionality aplikací Node.js byla připravena rozsáhlá kolekce modulů, včetně těch, které implementují servery a klienty HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduly pro integraci s různými webovými frameworky, obslužné rutiny WebSocket a Ajax, konektory k DBMS (MySQL, PostgreSQL, SQLite, MongoDB), šablonovací enginy, CSS enginy, implementace kryptografických algoritmů a autorizačních systémů (OAuth), XML parsery.
Ke zpracování velkého počtu paralelních požadavků používá Node.js asynchronní model provádění kódu založený na neblokujícím zpracování událostí a definování obslužných rutin zpětného volání. Mezi podporované metody pro multiplexní připojení patří epoll, kqueue, /dev/poll a select. Pro multiplexování připojení se používá knihovna libuv, která je doplňkem k libev na systémech Unix a k IOCP na Windows. Knihovna libeio se používá k vytvoření fondu vláken a c-ares je integrován pro provádění DNS dotazů v neblokujícím režimu. Všechna systémová volání, která způsobují blokování, jsou prováděna v rámci fondu vláken a poté, jako obslužné programy signálů, předávají výsledek své práce zpět přes nepojmenovanou rouru.
Spouštění kódu JavaScript je zajištěno pomocí enginu V8 vyvinutého společností Google (Microsoft navíc vyvíjí verzi Node.js s enginem Chakra-Core). Ve svém jádru je Node.js podobný frameworkům Perl AnyEvent, Ruby Event Machine, Python Twisted a implementaci událostí v Tcl, ale smyčka událostí v Node.js je před vývojářem skrytá a připomíná zpracování událostí ve webové aplikaci. běžící v prohlížeči.
Zdroj: opennet.ru
