Megjelent a Node.js 22.0, a JavaScript nyelvű hálózati alkalmazások futtatásához készült platform. A Node.js 22.0 az LTS (hosszú távú támogatás) ágba tartozik, de ezt a státuszt csak októberben kapja meg a stabilizálás után. A Node.js 22.x támogatása 2027. április 30-ig fog tartani. A korábbi LTS ág, a Node.js 20.x támogatása 2026. áprilisáig, míg az azt megelőző LTS ág, a 18.x 2025. áprilisáig lesz elérhető. A közbenső ág, a Node.js 21.x támogatása 2024. június 1-jén megszűnik.
Fő fejlesztések:
- A V8 motor frissítve lett 12.4-es verzióra, amely a Chromium 124-ben található. A Node.js 21-hez képest, ahol a V8 11.8 volt használatban, a következő változások tapasztalhatók:
- Támogatott a WasmGC kiterjesztés, amely megkönnyíti a szemétgyűjtő nyelveken (mint például Kotlin, PHP, Java stb.) írt programok WebAssembly-be való portolását. A WasmGC új típust és tömböket ad hozzá, amelyeknél alkalmazható a nemlineáris memóriaallokáció.
- Támogatott az Array.fromAsync() metódus, amely aszinkron módban visszaad egy új Array objektumot, amely tömbszerű objektumokból át másolt példány.
- Támogatottak az iterátorokkal való munkára vonatkozó metódusok, mint például .map, .filter, .find, .take, .drop, .forEach és .reduce.
- Támogatott a Set objektum, amely egy értéktömörítési gyűjteményt határoz meg, és tartalmazza a halmazokkal való tipikus műveletek megvalósítását, mint például metszetek, uniók, különbségek és kiegészítések.
- Alapértelmezés szerint aktiválva van a Maglev, egy optimalizáló JIT fordító, amely gyorsan generál nagy teljesítményű gépi kódot aktívan használt JavaScript kódokhoz. A Maglev aktiválása jelentősen felgyorsítja a rövid életű CLI alkalmazások működését, amelyek nem végeznek hosszú folyamatokat, például a Jetstream teszt ideje 7,5%-kal, a Speedometer teszt ideje pedig 5%-kal csökken.
- A folyamok kezelése felgyorsult a highWaterMark opció értékének 16 KB-ról 65 KB-ra emelésével (ez határozza meg a bejegyzések pufferezési korlátját). Ez a változtatás megnöveli a memóriafogyasztást, ezért azoknak az alkalmazásoknak, amelyek korlátozott RAM-mal működnek, vissza kell állítaniuk a régi értéket a setDefaultHighWaterMark() hívásával.
- Növelték a fetch() API és a tesztelő teljesítményét az AbortSignal példányok létrehozásának hatékonyságának javításával. Növelték az API-k teljesítményét, amelyek a fájlrendszerekkel való szinkron működéssel kapcsolatosak.
- Kísérleti lehetőségként elérhetővé vált a require() hívás ESM (ECMAScript Modules) JavaScript modulok szinkron betöltésére. Az ESM modulokat a böngészők használják és a Node.js-hez tartozó CommonJS modulok helyébe lépnek. Az ESM modul szinkron módban kell futnia a require() híváshoz (await nélkül a legfelső szinten). A támogatás a "--experimental-require-module" zászlóval kapcsolható be.
- Kísérleti lehetőségként hozzáadva a package.json fájlban definiált szkriptek futtatására a "--run " parancs használatával.
- A stabil kategóriába került a "node --watch" parancs, amely megfigyelő üzemmódot valósít meg, lehetővé téve a folyamat újraindítását a betöltött fájl változása esetén (például a "node --watch index.js" parancs esetén a folyamat automatikusan újraindul, ha az index.js megváltozik).
- Stabilizálták a beépített WebSocket API megvalósítást, amely lehetővé teszi a WebSocket használatát kliens módban további függőségek telepítése nélkül.
- Részleges támogatást kaptak a Navigator API-hoz.
- A Webstreams API-ban hozzáadták a deflate-raw tömörítési formátum támogatását.
- A node:fsmodule modulhoz glob és globSync funkciókat adtak az átnevezési minták alapján történő fájl-útvonal egyeztetésére.
- Javították a hibásan konfigurált IPv6 verem kezelését. Megvalósították a Happy Eyeballs algoritmust az IPv6 működésével kapcsolatos problémák gyors visszavonására.
- Elavulttá nyilvánították a util API-t.
- Frissítették a függőségek verzióit: 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 3.8.0, ada 2.7.7 és undici 6.6.0.
A Node.js platform szerver oldali webalkalmazások működtetésére, valamint hagyományos kliens és szerver hálózati programok készítésére használható. A Node.js alkalmazások funkcionalitásának bővítése érdekében egy nagy modulgyűjtemény készült, amely tartalmaz különböző megvalósítású modulokat. szerverek és HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 klienseket, valamint modulokat különböző webkeretrendszerek integrálásához, WebSocket és Ajax kezelőket, az adatbázisokhoz (MySQL, PostgreSQL, SQLite, MongoDB) való kapcsolódásokat, sablongenerátorokat, CSS-motorokat, kriptográfiai algoritmusok és hitelesítési rendszerek (OAuth) megvalósításait, XML-parsereket.
A párhuzamos lekérések nagy számú feldolgozásának biztosítása érdekében a Node.js aszinkron kódvégrehajtási modellt alkalmaz, amely események feldolgozásán alapul nem blokkoló módban, és callback-kezelők definiálásával. A kapcsolatok multiplexelésére olyan módszerek támogatottak, mint az epoll, kqueue, /dev/poll és select. A kapcsolatok multiplexeléséhez a libuv könyvtárat használják, amely a libev fölé épül Unix rendszereken és az IOCP fölé Windows alatt. A szálak medencéjének (thread pool) létrehozásához a libeio könyvtárat alkalmazzák, míg a DNS-lekérdezések nem blokkoló módú végrehajtásához a c-ares integrálva van. Minden blokkoló rendszerhívás a szálak medencéjén belül történik, majd, akárcsak a jelkezelők, az eredményüket egy névtelen csőn (pipe) keresztül továbbítják.
A JavaScript-kód végrehajtása a Google által fejlesztett V8 motor aktiválásával valósul meg (továbbá a Microsoft is fejleszti a Node.js alternatíváját a Chakra-Core motorral). A Node.js alapvetően hasonlít a Perl AnyEvent, Ruby Event Machine, Python Twisted és a Tcl eseménykezelésének megvalósítására, azonban a Node.js eseményfeldolgozó ciklusa el van rejtve a fejlesztő elől, és hasonlít a webalkalmazásban, böngészőben zajló eseménykezelésre.
Forrás: opennet.ru
