Objavljen je Node.js 22.0, platforma za pokretanje mrežnih aplikacija u JavaScript-u. Node.js 22.0 je klasifikovan kao grana za dugoročnu podršku, ali ovaj status će biti dodijeljen tek u oktobru, nakon stabilizacije. Node.js 22.x će biti podržan do 30. aprila 2027. Održavanje prethodne LTS grane Node.js 20.x trajaće do aprila 2026. godine, a pretprošle LTS grane 18.x do aprila 2025. godine. Stage grana Node.js 21.x će biti prekinuta 1. juna 2024.
Glavna poboljšanja:
- V8 motor je ažuriran na verziju 12.4, korištenu u Chromiumu 124. Među promjenama u odnosu na granu Node.js 21, koja je koristila V8 11.8 motor), napominje se:
- Podrška za proširenje WasmGC, koje pojednostavljuje prenos programa napisanih na programskim jezicima koji koriste sakupljač smeća (Kotlin, PHP, Java, itd.) na WebAssembly. WasmGC dodaje nove tipove struktura i nizova koji mogu koristiti nelinearnu dodjelu memorije.
- Podrška za metodu Array.fromAsync(), koja asinhrono vraća novu instancu Array objekta kopiranu iz niza sličnog, iterable ili async iterable objekta.
- Podrška za metode iteratora kao što su .map, .filter, .find, .take, .drop, .forEach i .reduce.
- Podrška za objekt Set koji definira kolekciju vrijednosti i nudi metode koje implementiraju uobičajene skupove operacije, kao što su presjek, unija, razlika i zbrajanje.
- Maglev optimizirajući JIT kompajler je omogućen prema zadanim postavkama, s ciljem brzog generiranja mašinskog koda visokih performansi za jako korišteni JavaScript kod. Omogućavanje Maglev-a može značajno ubrzati kratkotrajne CLI aplikacije koje ne obavljaju dugoročne operacije, na primjer, vrijeme za završetak Jetstrea testa je smanjeno za 7.5%, a test Speedometer za 5%.
- Rad sa streamovima je ubrzan povećanjem vrijednosti highWaterMark opcije sa 16 KB na 65 KB (definira granicu do koje se snima u međuspremnik). Promjena rezultira povećanom potrošnjom memorije, tako da će aplikacije dizajnirane za rad na ograničenoj RAM memoriji možda morati vratiti staru vrijednost putem poziva setDefaultHighWaterMark().
- Poboljšane performanse API-ja fetch() i test runnera čineći AbortSignal instanciju efikasnijom. Poboljšane su performanse API-ja koji se odnose na sinhroni rad sa sistemima datoteka.
- Omogućena je eksperimentalna funkcija za korištenje poziva "require()" za učitavanje JavaScript ESM modula (ECMAScript Modules) u sinhronom načinu rada. ESM moduli se koriste u pretraživačima i zamjenjuju CommonJS module specifične za Node.js. Za učitavanje putem "require()", ESM modul mora biti izvršen u sinhronom modu (bez čekanja na najvišem nivou). Podrška je omogućena preko “--experimental-require-module” zastavice.
- Dodata eksperimentalna mogućnost pokretanja skripti definiranih u datoteci package.json pomoću naredbe "--run" "
- Naredba “node –watch” je premještena u stabilnu kategoriju sa implementacijom moda praćenja koji osigurava da se proces ponovo pokrene kada se uvezena datoteka promijeni (na primjer, ako se izvrši “node –watch index.js”, proces će se automatski ponovo pokrenuti kada se index.js promijeni).
- Izvorna implementacija WebSocket API-ja je stabilizirana, omogućavajući WebSocket da se koristi u klijentskom modu bez instaliranja dodatnih ovisnosti.
- Dodata djelomična podrška za Navigator API.
- Webstreams API je dodao podršku za deflate-raw format kompresije.
- Dodane funkcije glob i globSync u node:fsmodule za podudaranje uzoraka putanja datoteka.
- Poboljšano rukovanje pogrešno konfigurisanim IPv6 stekovima. Implementiran Happy Eyeballs algoritam za brzo vraćanje u slučaju problema sa IPv6 radom.
- Util API je zastario.
- Ažurirane 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 na 3.8.0, ada 2.7.7 i 6.6.0. .
Node.js platforma se može koristiti i za podršku web aplikacija na strani servera i za kreiranje standardnih mrežnih programa na strani klijenta i servera. Za proširenje funkcionalnosti Node.js aplikacija, pripremljena je velika kolekcija modula, uključujući i one koji implementiraju serveri i klijenti HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduli za integraciju s različitim web frameworkima, WebSocket i Ajax handleri, konektori za DBMS (MySQL, PostgreSQL, SQLite, MongoDB), sistemi za kreiranje predložaka, CSS sistemi, implementacije kriptografskih algoritama i sistema za autorizaciju (OAuth), XML parseri.
Za rukovanje velikim brojem paralelnih zahtjeva, Node.js koristi model izvršavanja asinhronog koda baziran na neblokirajućoj obradi događaja i definiranju rukovatelja povratnim pozivima. Podržane metode za multipleksiranje veza uključuju epoll, kqueue, /dev/poll i select. Za multipleksiranje veze koristi se biblioteka libuv, koja je dodatak za libev na Unix sistemima i IOCP na Windows. Biblioteka libeio se koristi za kreiranje skupa niti, a c-ares je integriran za obavljanje DNS upita u neblokirajućem načinu. Svi sistemski pozivi koji uzrokuju blokiranje izvode se unutar spremišta niti, a zatim, poput rukovatelja signalom, prosljeđuju rezultat svog rada natrag kroz neimenovanu cijev.
Izvršenje JavaScript koda je osigurano korištenjem V8 motora koji je razvio Google (pored toga, Microsoft razvija verziju Node.js sa Chakra-Core motorom). U svojoj srži, Node.js je sličan Perl AnyEvent, Ruby Event Machine, Python Twisted okvirima i implementaciji događaja u Tcl-u, ali je petlja događaja u Node.js skrivena od programera i podsjeća na obradu događaja u web aplikaciji radi u pretraživaču.
izvor: opennet.ru
