Platforma JavaScript Node.js 22.0.0 este disponibilă

A avut loc lansarea Node.js 22.0, o platformă pentru rularea aplicațiilor de rețea în JavaScript. Node.js 22.0 face parte din ramurile cu suport pe termen lung, dar acest statut va fi acordat abia în octombrie, după stabilizarea sa. Suportul pentru Node.js 22.x va fi disponibil până pe 30 aprilie 2027. Întreținerea ramurii LTS anterioare Node.js 20.x va continua până în aprilie 2026, iar pentru ramura LTS anterioară 18.x, până în aprilie 2025. Întreținerea ramurii intermediare Node.js 21.x se va încheia pe 1 iunie 2024.

Îmbunătățiri principale:

  • Motorul V8 a fost actualizat la versiunea 12.4, utilizat în Chromium 124. Printre modificările față de ramura Node.js 21, în care era folosit motorul V8 11.8, se remarcă:
    • Suport pentru extensia WasmGC, care simplifică portarea programelor scrise în limbaje de programare care folosesc colector de gunoi (Kotlin, PHP, Java etc.) în WebAssembly. WasmGC adaugă noi tipuri de structuri și matrice, pentru care poate fi aplicată alocarea de memorie non-liniară.
    • Suport pentru metoda Array.fromAsync(), care returnează în mod asincron o nouă instanță a obiectului Array, copiat din obiecte asemănătoare cu matricea, enumerate (iterable) sau enumerate asincron (async iterable).
    • Suport pentru metodele de lucru cu iteratori, cum ar fi .map, .filter, .find, .take, .drop, .forEach și .reduce.
    • Suport pentru obiectul Set, care definește o colecție de valori și oferă metode pentru implementarea operațiunilor tipice de lucru cu mulțimi, cum ar fi intersecțiile, uniunile, diferențele și completările.
  • Compilerul JIT optimizator Maglev este activat implicit, având ca scop generarea rapidă a codului mașină performant pentru codul JavaScript folosit frecvent. Activarea Maglev permite o accelerare semnificativă a performanței aplicațiilor CLI cu o durată de viață scurtă, care nu efectuează operațiuni lungi, de exemplu, timpul de execuție al testului Jetstream este redus cu 7,5%, iar testul Speedometer cu 5%.
  • Accelerarea lucrului cu fluxuri prin creșterea valorii opțiunii highWaterMark de la 16 KB la 65 KB (stabilește limita până la care se efectuează tamponarea scrierii). Această modificare duce la o creștere a consumului de memorie, așa că aplicațiile care sunt proiectate să funcționeze cu capacitate limitată de RAM ar putea necesita revenirea la vechea valoare prin apelul setDefaultHighWaterMark().
  • Performanța API-ului fetch() și a rulării testelor a fost îmbunătățită prin eficientizarea creării instanțelor AbortSignal. Performanța API-urilor legate de lucrul sincron cu sistemele de fișiere a fost de asemenea crescută.
  • O opțiune experimentală a fost introdusă pentru a utiliza apelul „require()” pentru a încărca module JavaScript ESM (ECMAScript Modules) în mod sincron. Modulele ESM sunt utilizate în browsere și înlocuiesc modulele CommonJS specifice Node.js. Pentru a fi încărcat prin „require()”, modulul ESM trebuie să fie executat în mod sincron (fără await la nivelul superior). Suportul este activat prin flag-ul „—experimental-require-module”.
  • O opțiune experimentală a fost adăugată pentru a rula scripturi definite în fișierul package.json folosind comanda „—run ”.
  • Comanda „node —watch” a fost adusă în categoria stabilă, având implementat modul de observație, care asigură repornirea procesului atunci când fișierele importate se modifică (de exemplu, în cazul rulării „node —watch index.js”, procesul va fi repornit automat atunci când index.js este modificat).
  • Implementarea încorporată a API-ului WebSocket a fost stabilizată, permițând utilizarea WebSocket-ului în modul client fără a instala dependențe suplimentare.
  • Suport parțial pentru API-ul Navigator a fost adăugat.
  • În API-ul Webstreams a fost adăugat suport pentru formatul de compresie deflate-raw.
  • În modulul node:fsmodule au fost adăugate funcțiile glob și globSync pentru potrivirea căilor fișierelor pe baza unui model.
  • Gestionarea stivelor IPv6 configurate incorect a fost îmbunătățită. A fost implementat algoritmul Happy Eyeballs pentru a reveni rapid în caz de probleme cu funcționarea IPv6.
  • API-ul util a fost declarat deprecated.
  • Versiunile dependențelor au fost actualizate: 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 3.8.0, ada 2.7.7 și undici 6.6.0.

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 gestiona un număr mare de cereri paralele, Node.js utilizează un model asincron de execuție a codului, bazat pe procesarea evenimentelor în mod non-blocant și definirea callback-urilor. Ca metode de multiplexare a conexiunilor sunt susținute tehnici precum epoll, kqueue, /dev/poll și select. Pentru multiplexarea conexiunilor este utilizată biblioteca libuv, care este o extensie a libev în sistemele Unix și a IOCP în Windows. Pentru a crea un pool de thread-uri este folosită biblioteca libeio, iar pentru efectuarea cererilor DNS în mod non-blocant este integrat c-ares. Toate apelurile de sistem care generează blocaje sunt efectuate în cadrul pool-ului de thread-uri și apoi, ca și handlerii de semnale, transmit rezultatul muncii lor înapoi printr-un canal anonim (pipe).

Executarea codului JavaScript este asigurată prin utilizarea motorului V8 dezvoltat de Google (în plus, Microsoft dezvoltă o variantă a 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 loop-ul de procesare a evenimentelor în Node.js este ascuns de dezvoltator și se aseamănă cu procesarea evenimentelor într-o aplicație web care rulează în browser.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster