A avut loc lansarea Node.js 18.0, o platformă pentru rularea aplicațiilor de rețea scrise în JavaScript. Node.js 18.0 este inclus în ramurile cu suport pe termen lung, dar acest statut va fi acordat doar în octombrie, după finalizarea stabilizării. Suportul pentru Node.js 18.x va dura până în aprilie 2025. Suportul pentru ramura LTS anterioară Node.js 16.x va continua până în aprilie 2024, iar pentru ramura LTS precedentă 14.x până în aprilie 2023. Suportul pentru ramura LTS 12.x va fi încheiat pe 30 aprilie, iar pentru ramura intermediară Node.js 17.x pe 1 iunie.
Îmbunătățiri principale:
- Motorul V8 a fost actualizat la versiunea 10.1, folosită în Chromium 101. Comparativ cu lansarea Node.js 17.9.0, au fost adăugate suport pentru caracteristici precum metodele findLast și findLastIndex pentru căutarea elementelor de la sfârșitul array-ului și funcția Intl.supportedValuesOf. API-ul Intl.Locale a fost îmbunătățit. Inițializarea câmpurilor de clasă și a metodelor private a fost accelerată.
- API-ul experimental fetch() este acum activat implicit, destinat descărcării resurselor prin rețea. Implementarea este bazată pe codul clientului HTTP/1.1 undici și este cât mai apropiată de API-ul similar oferit în browsere. De asemenea, suportă interfețele FormData, Headers, Request și Response pentru manipularea antetelor HTTP pentru cereri și răspunsuri. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
- A fost adăugată o implementare experimentală a API-ului Web Streams, care oferă acces la fluxurile de date primite prin rețea. API-ul permite adăugarea de manipulatoare pentru a lucra cu datele pe măsură ce informația este primită, fără a aștepta descărcarea întregului fișier. În Node.js sunt acum disponibile obiecte precum ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream și DecompressionStream.
- API-ul Blob a fost inclus ca stabil, permițând encapsularea datelor binare imutabile pentru a fi utilizate în siguranță în diferite fire de execuție.
- API-ul BroadcastChannel a fost inclus ca stabil, permițând organizarea schimbului de mesaje în mod asincron în formatul „un expeditor - mulți destinatari”.
- A fost adăugat un modul experimental node:test pentru crearea și rularea testelor în JavaScript, care returnează rezultate în format TAP (Test Anything Protocol).
- S-a asigurat formarea pachetelor gata de utilizare pentru Red Hat Enterprise Linux (RHEL) 8 și alte distribuții bazate pe Glibc 2.28+, inclusiv Debian 10 și Ubuntu 20.04, precum și pentru macOS 10.15+. Din cauza problemelor întâmpinate cu compilarea motorului V8, formarea pachetelor pe 32 de biți pentru Windows a fost temporar suspendată.
- A fost oferită o opțiune experimentală pentru compilarea fișierului executabil Node.js cu componentele selectate de utilizator, inițializate la pornire. Pentru a defini componentele de start, în scriptul de compilare configure a fost adăugată opțiunea „—node-snapshot-main”, de exemplu, „./configure —node-snapshot-main=marked.js; nume nod”.
Platforma Node.js poate fi utilizată atât pentru suportul serverului în funcționarea aplicațiilor web, cât și pentru crearea de aplicații client și server de rețea obișnuite. Pentru a extinde funcționalitatea aplicațiilor pentru Node.js a fost pregătită o mare colecție de module, în care se pot găsi module cu implementări servere și clienți HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, module pentru integrarea cu diverse framework-uri web, manejere WebSocket și Ajax, convertoare pentru baze de date (MySQL, PostgreSQL, SQLite, MongoDB), generatoare de șabloane, motoare CSS, implementări de algoritmi criptografici și sisteme de autorizare (OAuth), parsere XML.
Pentru a asigura procesarea unui număr mare de cereri paralele, Node.js utilizează un model asincron de execuție a codului, bazat pe procesarea evenimentelor în mod neblocat și pe definirea de callback-uri. Ca metode de multiplexare a conexiunilor sunt susținute metode precum epoll, kqueue, /dev/poll și select. Pentru multiplexarea conexiunilor se utilizează biblioteca libuv, care este o extensie a libev în sistemele Unix și a IOCP în Windows. Pentru crearea unui pool de thread-uri este folosită biblioteca libeio, iar pentru executarea cererilor DNS în mod neblocat este integrat c-ares. Toate apelurile sistemice care provoacă blocarea sunt executate în interiorul pool-ului de thread-uri și apoi, la fel ca manejerele de semnale, transmit rezultatul muncii lor înapoi printr-un canal anonim (pipe). Execuția codului JavaScript este asigurată prin implicarea motorului V8 dezvoltat de compania Google (în plus, Microsoft dezvoltă o variantă de Node.js cu motorul Chakra-Core).
În esență, Node.js este similar cu framework-urile Perl AnyEvent, Ruby Event Machine, Python Twisted și implementarea evenimentelor în Tcl, dar ciclul de procesare a evenimentelor (event loop) din Node.js este ascuns de dezvoltator și seamănă cu procesarea evenimentelor într-o aplicație web care rulează într-un browser. Atunci când scrieți aplicații pentru Node.js, trebuie să luați în considerare specificul programării orientate pe evenimente, de exemplu, în loc de a executa „var result = db.query(„select..”);” așteptând finalizarea operațiunii și prelucrarea ulterioară a rezultatelor, în Node.js se folosește principiul execuției asincrone, adică codul se transformă în „db.query(„select..”, function (result) {prelucrarea rezultatului});”, moment în care controlul va trece instantaneu la alt cod, iar rezultatul cererii va fi prelucrat pe măsură ce datele sosesc.
Sursa: opennet.ro
