Izšla je različica Node.js 22.0, platforme za izvajanje omrežnih aplikacij v JavaScriptu. Node.js 22.0 spada v razred z dolgoročnim podporo, ta status pa bo dodeljen šele oktobra, po stabilizaciji. Podpora za Node.js 22.x bo trajala do 30. aprila 2027. Podpora prejšnji LTS različici Node.js 20.x bo trajala do aprila 2026, prejšnji LTS različici 18.x pa do aprila 2025. Podpora za vmesno različico Node.js 21.x bo prenehala 1. junija 2024.
Glavne izboljšave:
- Motor V8 je posodobljen na različico 12.4, ki se uporablja v Chromium 124. Med spremembami v primerjavi z različico Node.js 21, ki je uporabljala motor V8 11.8, so opazne:
- Podpora za razširitev WasmGC, ki poenostavi prenos programov napisanih v programskih jezikih, ki uporabljajo zbiralnik smeti (Kotlin, PHP, Java itd.), v WebAssembly. WasmGC dodaja nove tipe struktur in tabel, za katere je mogoče uporabiti nelinerano dodeljevanje pomnilnika.
- Podpora za metodo Array.fromAsync(), ki v asinhronem načinu vrne nov primerek objekta Array, skopiranega iz objektov, podobnih tabelam, ki se ga enumerirajo (iterable) ali asinhrono enumerirajo (async iterable).
- Podpora za metode dela z iteratori, kot so .map, .filter, .find, .take, .drop, .forEach in .reduce.
- Podpora za objekt Set, ki definira zbirko vrednosti in ponuja metode za izvrševanje tipičnih operacij dela s množicami, kot so preseki, povezave, razlike in dopolnila.
- Privzeto je vključen optimizirani JIT-kompajler Maglev, namenjen hitri generaciji visokozmogljivega strojnega kode za aktivno uporabljeno kodo v JavaScriptu. Vključitev Magleva znatno pospeši delovanje kratkotrajnih CLI aplikacij, ki ne izvajajo dolgotrajnih operacij, na primer, čas testiranja Jetstream se skrajša za 7,5 %, testirane na Speedometer pa za 5 %.
- Pospešeno je delo s tokovi s povečanjem vrednosti možnosti highWaterMark z 16 KB na 65 KB (določa limit, do katerega se izvaja predpomnjenje zapisa). Ta sprememba povečuje porabo pomnilnika, zato morda aplikacijam, ki so zasnovane za delovanje z omejenimi količinami RAM-a, pri tem, da vrnejo staro vrednost z uporabo klica setDefaultHighWaterMark().
- Povečana je učinkovitost API-ja fetch() i test runner-a zahvaljujući poboljšanju efikasnosti kreiranja instanci AbortSignal. Poboljšane su performanse API-ja povezanih sa sinhronim radom sa datotečnim sistemima.
- Pružena je eksperimentalna mogućnost korišćenja poziva „require()“ za učitavanje JavaScript modula ESM (ECMAScript Modules) u sinhronom režimu. ESM moduli se koriste u pregledačima i zamenjuju CommonJS module specifične za Node.js. Da bi se učitao ESM modul pomoću „require()“, mora se izvršavati u sinhronom režimu (bez await na vrhunskom nivou). Podrška se uključuje putem flag-a „—experimental-require-module“.
- Dodana je eksperimentalna mogućnost pokretanja skripti definisanih u datoteci package.json koristeći komandu „—run “.
- U kategoriju stabilnih preneta je komanda „node —watch“ sa implementacijom režima praćenja koji osigurava ponovni pokret procesa pri promeni importovane datoteke (na primer, prilikom izvršavanja „node —watch index.js“, proces će se automatski ponovo pokrenuti pri promeni index.js).
- Stabilizovana je ugrađena implementacija API-ja WebSocket, koja omogućava korišćenje WebSocket-a u režimu klijenta bez instalacije dodatnih zavisnosti.
- Dodata je delimična podrška API-ju Navigator.
- U API Webstreams dodata je podrška za format kompresije deflate-raw.
- U modul node:fsmodule dodate su funkcije glob i globSync za usklađivanje putanja datoteka prema obrascu.
- Poboljšana je obrada nepravilno konfigurisanih stakova IPv6. Implementiran je algoritam Happy Eyeballs za brzi povratak u slučaju problema sa radom IPv6.
- API util je označen kao zastareo.
- Ažurirane su verzije zavisnosti: 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 do 3.8.0, ada 2.7.7 i undici 6.6.0.
Platforma Node.js se lahko uporablja tako za strežniško spremljanje delovanja spletnih aplikacij kot tudi za ustvarjanje običajnih odjemalskih in strežniških omrežnih programov. Za razširitev funkcionalnosti aplikacij za Node.js je pripravljena obsežna zbirka modulov, v kateri lahko najdete module z implementacijo. strežnikov i HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 klijenata, module za integraciju sa raznim web okvirima, WebSocket i Ajax obradi, konektore za baze podataka (MySQL, PostgreSQL, SQLite, MongoDB), predloške, CSS motore, implementacije kriptoalgoritama i sistema autorizacije (OAuth), XML parsera.
Za obradu velikog broja paralelnih zahteva, Node.js koristi asinhroni model izvođenja koda temeljen na obradi događaja u neblokirajućem načinu i definisanju callback-obrađivača. Metode poput epoll, kqueue, /dev/poll i select podržane su kao načini multiplexiranja konekcija. Za multiplexiranje konekcija koristi se library libuv, koja je nadogradnja na libev u Unix sistemima i IOCP u Windows-u. Za kreiranje thread pool-a koristi se library libeio, a za izvršavanje DNS zahteva u neblokirajućem načinu integriran je c-ares. Svi sistemski pozivi koji izazivaju blokadu izvršavaju se unutar thread pool-a, a zatim, poput obrđivača signala, prenose rezultate svog rada nazad kroz anonimni kanal (pipe).
Izvajanje JavaScript kode je omogočeno z vključitvijo motorja V8, ki ga je razvila družba Google (poleg tega Microsoft razvija različico Node.js z motorjem Chakra-Core). Node.js v bistvu spominja na okvire Perl AnyEvent, Ruby Event Machine, Python Twisted in implementacijo dogodkov v Tcl, vendar je dogodek obravnavan v Node.js skrit pred razvijalcem in spominja na obravnavo dogodkov v spletnem aplikaciji, ki deluje v brskalniku.
Izvor: opennet.ru
