Objavljena je verzija Node.js 22.0, platforme za izvođenje mrežnih aplikacija napisanim u JavaScriptu. Node.js 22.0 je klasificiran kao verzija s dugoročnom podrškom, ali će taj status biti dodijeljen tek u listopadu, nakon stabilizacije. Podrška za Node.js 22.x trajat će do 30. travnja 2027. godine. Održavanje prošle LTS verzije Node.js 20.x će trajati do travnja 2026. godine, a prethodne LTS verzije 18.x do travnja 2025. godine. Održavanje međuverzije Node.js 21.x prestaje 1. lipnja 2024. godine.
Glavna poboljšanja:
- Pokretač V8 ažuriran je na verziju 12.4, koja se koristi u Chromiumu 124. Iz promjena u verziji Node.js 21, koja je koristila pokretač V8 11.8, ističe se:
- Podrška za ekstenziju WasmGC, koja olakšava portiranje programa napisanih na jezicima koji koriste sakupljač smeća (Kotlin, PHP, Java itd.) u WebAssembly. WasmGC dodaje nove tipove struktura i nizova za koje se može primijeniti nenelinearno dodjeljivanje memorije.
- Podrška za metodu Array.fromAsync(), koja u asinkronom načinu vraća novu instancu Array objekta, kopiranu iz objekata sličnih nizu koji su enumerirali (iterabilni) ili asinkrono enumerirani (asinkroni iterabilni).
- Podrška za metode za rad s iteratorima, poput .map, .filter, .find, .take, .drop, .forEach i .reduce.
- Podrška za objekt Set, koji definira kolekciju vrijednosti i nudi metode za tipične operacije s mnoštvom, kao što su presjek, unija, razlika i dopuna.
- Uključen je optimizirajući JIT kompajler Maglev po zadanom, usmjeren na brzu generaciju visokoučinkovitog strojnog koda za aktivno korišteni JavaScript kod. Uključivanje Maglev-a značajno ubrzava rad kratkotrajnih CLI aplikacija koje ne izvode dugotrajne operacije; na primjer, vrijeme prolaza Jetstream testa smanjuje se za 7.5%, a Speedometer testa za 5%.
- Poboljšane su performanse pri radu s tokovima povećanjem vrijednosti opcije highWaterMark s 16 KB na 65 KB (određuje granicu do koje se obavlja međubufferiranje zapisivanja). Ova promjena dovodi do povećanja potrošnje memorije, stoga će aplikacijama koje su dizajnirane za rad s ograničenom količinom RAM-a možda biti potrebno vratiti staru vrijednost pozivom setDefaultHighWaterMark().
- Povećana je učinkovitost API-ja fetch() i test runnera poboljšanjem efikasnosti kreiranja instanci AbortSignal. Povećana je učinkovitost API-ja vezanih za sinkrono upravljanje datotečnim sustavima.
- Dodana je eksperimentalna mogućnost korištenja poziva „require()” za učitavanje ESM (ECMAScript Modules) JavaScript modula u sinkronom režimu. ESM moduli se koriste u preglednicima i zamjenjuju CommonJS module specifične za Node.js. Da bi se ESM modul učitao putem „require()”, mora se izvršavati u sinkronom režimu (bez await na vrhu). Podrška se uključuje putem opcije „—experimental-require-module”.
- Dodana je eksperimentalna mogućnost pokretanja skripti definiranih u datoteci package.json korištenjem komande „—run .”
- U stabilnu kategoriju prebačena je komanda „node —watch” s implementacijom načina nadzora koji osigurava ponovno pokretanje procesa kada se promijeni uvezeni datotek (primjerice, kada se izvršava „node —watch index.js”, proces će automatski biti ponovno pokrenut kada se promijeni index.js).
- Stabilizirana je ugrađena implementacija API-ja WebSocket koja omogućuje korištenje WebSocket u klijentskom režimu bez potrebe za dodatnim ovisnostima.
- Dodana je djelomična podrška za API Navigator.
- U API Webstreams dodana je podrška za format kompresije deflate-raw.
- U modul node:fsmodule dodane su funkcije glob i globSync za usklađivanje putanja datoteka prema uzorku.
- Poboljšana je obrada nepravilno konfiguriranih IPv6 stogova. Implementiran je algoritam Happy Eyeballs za brzo povlačenje u slučaju problema s IPv6.
- API util je proglašen zastarjelim.
- Ažurirane su verzije ovisnosti: 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 može se koristiti kako za poslužiteljsko održavanje web aplikacija, tako i za izradu uobičajenih klijentskih i poslužiteljskih mrežnih programa. Za proširenje funkcionalnosti aplikacija za Node.js pripremljena je velika kolekcija modula, u kojoj se mogu pronaći moduli s implementacijama poslužitelja i klijenata HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduli za integraciju s raznim web okvirima, obrada WebSocket i Ajax, konektori za baze podataka (MySQL, PostgreSQL, SQLite, MongoDB), predlošci, CSS motori, implementacije kriptoalgoritama i sustava autentifikacije (OAuth), XML parseri.
Kako bi se obradilo veliki broj paralelnih zahtjeva, Node.js koristi asinkroni model pokretanja koda, temeljen na neblokirajućem načinu obrade događaja i definiranju callback handlera. Kao metode multiplexiranja konekcija podržane su metode kao što su epoll, kqueue, /dev/poll i select. Za multiplexiranje konekcija koristi se biblioteka libuv, koja je nadogradnja na libev u Unix sustavima i IOCP u Windowsu. Za kreiranje thread pool-a koristi se biblioteka libeio, dok je za neblokirajuće izvođenje DNS zahtjeva integriran c-ares. Svi sistemski pozivi koji uzrokuju blokiranje obavljaju se unutar thread pool-a, a zatim, kao i signalni handleri, vraćaju rezultate svog rada preko neimenovanog kanala (pipe).
Izvršavanje JavaScript koda osigurano je korištenjem V8 motora koji je razvila tvrtka Google (uz to, Microsoft razvija varijantu Node.js s motorom Chakra-Core). Suštinski, Node.js je sličan Perl AnyEvent, Ruby Event Machine, Python Twisted okvirima i implementaciji događaja u Tcl-u, ali je ciklus obrade događaja (event loop) u Node.js skriven od programera i podsjeća na obradu događaja u web-aplikaciji koja radi u pregledniku.
Izvor: opennet.ru
