Izdan je Node.js 22.0, platforma za pokretanje mrežnih aplikacija u JavaScriptu. Node.js 22.0 klasificiran je kao grana dugoročne podrške, ali će taj status biti dodijeljen tek u listopadu, nakon stabilizacije. Node.js 22.x bit će podržan do 30. travnja 2027. Održavanje prethodne LTS grane Node.js 20.x trajat će do travnja 2026., a pretprošle LTS grane 18.x do travnja 2025. Postupni ogranak Node.js 21.x ukinut će se 1. lipnja 2024.
Glavna poboljšanja:
- Motor V8 ažuriran je na verziju 12.4, koja se koristi u Chromiumu 124. Među promjenama u usporedbi s ogrankom Node.js 21, koji je koristio motor V8 11.8), navedeno je:
- Podrška za proširenje WasmGC, koje pojednostavljuje prijenos programa napisanih u programskim jezicima koji koriste skupljač smeća (Kotlin, PHP, Java, itd.) na WebAssembly. WasmGC dodaje nove vrste struktura i nizova koji mogu koristiti nelinearnu dodjelu memorije.
- Podrška za metodu Array.fromAsync(), koja asinkrono vraća novu instancu objekta Array kopiranog iz objekta nalik polju, iterable ili async iterable objekta.
- Podrška za metode iteratora kao što su .map, .filter, .find, .take, .drop, .forEach i .reduce.
- Podrška za skupni objekt koji definira kolekciju vrijednosti i nudi metode koje implementiraju zajedničke operacije skupa, kao što su presjek, unija, razlika i zbrajanje.
- Maglev optimizirajući JIT prevodilac omogućen je prema zadanim postavkama, s ciljem brzog generiranja strojnog koda visokih performansi za često korišteni JavaScript kod. Omogućavanje Magleva može značajno ubrzati kratkotrajne CLI aplikacije koje ne izvode dugotrajne operacije, na primjer, vrijeme za dovršetak Jetstrea testa smanjeno je za 7.5%, a Speedometer testa za 5%.
- Rad sa streamovima je ubrzan povećanjem vrijednosti highWaterMark opcije sa 16 KB na 65 KB (definira granicu do koje se snimka sprema u međuspremnik). Promjena rezultira povećanom potrošnjom memorije, pa će se aplikacije dizajnirane za rad s ograničenim RAM-om možda trebati vratiti na staru vrijednost putem poziva setDefaultHighWaterMark().
- Poboljšana izvedba API-ja fetch() i pokretača testiranja tako što je instanciranje AbortSignal postalo učinkovitije. Poboljšana je izvedba API-ja koji se odnose na sinkroni rad s datotečnim sustavima.
- Omogućena je eksperimentalna značajka za korištenje poziva "require()" za učitavanje JavaScript ESM modula (ECMAScript modula) u sinkronom načinu rada. ESM moduli koriste se u preglednicima i zamjenjuju CommonJS module specifične za Node.js. Za učitavanje putem "require()", ESM modul se mora izvršiti u sinkronom načinu (bez čekanja na najvišoj razini). Podrška je omogućena putem oznake “--experimental-require-module”.
- Dodana je eksperimentalna mogućnost pokretanja skripti definiranih u datoteci package.json pomoću naredbe "--run" "
- Naredba "node –watch" premještena je u stabilnu kategoriju s implementacijom načina nadzora koji osigurava da se proces ponovno pokrene kada se uvezena datoteka promijeni (na primjer, ako se izvrši "node –watch index.js", proces će se automatski ponovno pokrenuti kada se promijeni index.js).
- Izvorna implementacija WebSocket API-ja je stabilizirana, dopuštajući da se WebSocket koristi u načinu rada klijenta bez instaliranja dodatnih ovisnosti.
- Dodana djelomična podrška za Navigator API.
- Webstreams API dodao je podršku za format kompresije deflate-raw.
- Dodane su funkcije glob i globSync u node:fsmodule za podudaranje uzorka putova datoteka.
- Poboljšano rukovanje neispravno konfiguriranim IPv6 hrpama. Implementiran algoritam Happy Eyeballs za brzi povratak u slučaju problema s radom IPv6.
- Util API je zastario.
- Ažurirane 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 na 3.8.0, ada 2.7.7 i undici 6.6.0 .
Node.js platforma može se koristiti i za podršku web aplikacija na strani poslužitelja i za izradu standardnih mrežnih programa na strani klijenta i poslužitelja. Za proširenje funkcionalnosti Node.js aplikacija pripremljena je velika kolekcija modula, uključujući i one s implementacijama. poslužitelji i klijenti HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduli za integraciju s raznim web okvirima, WebSocket i Ajax rukovatelji, konektori za DBMS (MySQL, PostgreSQL, SQLite, MongoDB), predlošci, CSS mehanizmi, implementacije kriptografskih algoritama i autorizacijskih sustava (OAuth), XML parseri.
Za rukovanje velikim brojem paralelnih zahtjeva, Node.js koristi asinkroni model izvršavanja koda koji se temelji na obradi događaja bez blokiranja i definiranju rukovatelja povratnim pozivom. Podržane metode za multipleksiranje veza uključuju epoll, kqueue, /dev/poll i select. Za multipleksiranje veze koristi se biblioteka libuv, koja je dodatak libev na Unix sustavima i IOCP na Windowsima. Biblioteka libeio koristi se za stvaranje skupa niti, a c-ares je integriran za izvođenje DNS upita u načinu rada bez blokiranja. Svi sistemski pozivi koji uzrokuju blokiranje izvršavaju se unutar skupa niti, a zatim, poput rukovatelja signalima, prosljeđuju rezultat svog rada natrag kroz neimenovanu cijev.
Izvršenje JavaScript koda osigurano je korištenjem V8 motora koji je razvio Google (pored toga, Microsoft razvija verziju Node.js s Chakra-Core motorom). U svojoj srži, Node.js je sličan okvirima Perl AnyEvent, Ruby Event Machine, Python Twisted i implementaciji događaja u Tcl-u, ali je petlja događaja u Node.js skrivena od programera i nalikuje obradi događaja u web aplikaciji radi u pregledniku.
Izvor: opennet.ru
