Platforma JavaScript Node.js 22.0.0 disponibilă

A fost lansat Node.js 22.0, o platformă pentru rularea aplicațiilor de rețea în JavaScript. Node.js 22.0 este clasificat ca ramură de suport pe termen lung, dar acest statut va fi atribuit abia în octombrie, după stabilizare. Node.js 22.x va fi acceptat până la 30 aprilie 2027. Întreținerea ramurii LTS anterioare a Node.js 20.x va dura până în aprilie 2026, iar cu un an înainte de ultima ramură LTS 18.x până în aprilie 2025. Ramura de instalare a Node.js 21.x va fi întreruptă pe 1 iunie 2024.

Principalele îmbunătățiri:

  • Motorul V8 a fost actualizat la versiunea 12.4, folosită în Chromium 124. Dintre modificările față de ramura Node.js 21, care a folosit motorul V8 11.8), se remarcă:
    • Suport pentru extensia WasmGC, care simplifică portarea programelor scrise în limbaje de programare care folosesc un colector de gunoi (Kotlin, PHP, Java etc.) către WebAssembly. WasmGC adaugă noi tipuri de structuri și matrice care pot utiliza alocarea de memorie neliniară.
    • Suport pentru metoda Array.fromAsync(), care returnează în mod asincron o nouă instanță a unui obiect Array copiat dintr-un obiect iterabil asemănător matricei, iterabil sau asincron.
    • Suport pentru metode iteratoare, cum ar fi .map, .filter, .find, .take, .drop, .forEach și .reduce.
    • Suport pentru un obiect Set care definește o colecție de valori și oferă metode care implementează operații comune de set, cum ar fi intersecția, unirea, diferența și adăugarea.
  • Compilatorul JIT de optimizare Maglev este activat în mod implicit, având ca scop generarea rapidă de cod de mașină de înaltă performanță pentru codul JavaScript utilizat intens. Activarea Maglev poate accelera semnificativ aplicațiile CLI de scurtă durată care nu efectuează operațiuni pe termen lung, de exemplu, timpul de finalizare a testului Jetstrea este redus cu 7.5%, iar testul Speedometer cu 5%.
  • Lucrul cu fluxurile a fost accelerat prin creșterea valorii opțiunii highWaterMark de la 16 KB la 65 KB (definește limita până la care înregistrarea este tamponată). Modificarea are ca rezultat un consum crescut de memorie, astfel încât aplicațiile proiectate să ruleze pe RAM limitată ar putea trebui să revină la valoarea veche printr-un apel la setDefaultHighWaterMark().
  • Performanță îmbunătățită a API-urilor fetch() și test runner, făcând instanțierea AbortSignal mai eficientă. Performanța API-urilor legate de lucrul sincron cu sistemele de fișiere a fost îmbunătățită.
  • A fost furnizată o caracteristică experimentală pentru a utiliza apelul „require()” pentru a încărca module JavaScript ESM (module ECMAScript) în modul sincron. Modulele ESM sunt folosite în browsere și înlocuiesc modulele CommonJS specifice Node.js. Pentru a încărca prin „require()”, modulul ESM trebuie să fie executat în modul sincron (fără așteptare la nivelul superior). Suportul este activat prin marcajul „--experimental-require-module”.
  • S-a adăugat capacitatea experimentală de a rula scripturi definite în fișierul package.json folosind comanda „--run”. "
  • Comanda „node –watch” a fost mutată în categoria stabilă odată cu implementarea unui mod watch care asigură repornirea procesului atunci când se modifică fișierul importat (de exemplu, dacă se execută „node –watch index.js”, procesul va fi repornit automat când index.js se modifică).
  • Implementarea nativă a API-ului WebSocket a fost stabilizată, permițând ca WebSocket să fie utilizat în modul client fără a instala dependențe suplimentare.
  • S-a adăugat suport parțial pentru API-ul Navigator.
  • API-ul Webstreams a adăugat suport pentru formatul de compresie deflate-raw.
  • S-au adăugat funcții glob și globSync la node:fsmodule pentru potrivirea modelului căilor fișierelor.
  • Gestionare îmbunătățită a stivelor IPv6 configurate incorect. Implementat algoritmul Happy Eyeballs pentru derulare rapidă în caz de probleme cu funcționarea IPv6.
  • API-ul util a fost depreciat.
  • Versiuni actualizate de dependență: 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 la 3.8.0, ada 2.7.7 și undici. .

Platforma Node.js poate fi utilizată atât pentru suportul server-side al aplicațiilor web, cât și pentru crearea de programe standard de rețea client-side și server-side. Pentru a extinde funcționalitatea aplicațiilor Node.js, a fost pregătită o colecție extinsă de module, inclusiv cele care implementează servere și clienți HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, module pentru integrare cu diverse framework-uri web, handler-e WebSocket și Ajax, conectori la DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motoare de șabloane, motoare CSS, implementări de algoritmi criptografici și sisteme de autorizare (OAuth), parsere XML.

Pentru a gestiona un număr mare de solicitări paralele, Node.js folosește un model de execuție a codului asincron bazat pe procesarea evenimentelor neblocante și definirea handlerelor de apel invers. Metodele acceptate pentru multiplexarea conexiunilor includ epoll, kqueue, /dev/poll și select. Pentru multiplexarea conexiunii, se folosește biblioteca libuv, care este un add-on pentru libev pe sistemele Unix și pentru IOCP pe Windows. Biblioteca libeio este folosită pentru a crea un pool de fire, iar c-ares este integrat pentru a efectua interogări DNS într-un mod neblocant. Toate apelurile de sistem care provoacă blocarea sunt executate în pool-ul de fire și apoi, ca și manipulatorii de semnal, trec rezultatul muncii lor înapoi printr-o conductă fără nume.

Execuția codului JavaScript este asigurată prin utilizarea motorului V8 dezvoltat de Google (în plus, Microsoft dezvoltă o versiune de Node.js cu motorul Chakra-Core). În esență, Node.js este similar cu Perl AnyEvent, Ruby Event Machine, cadrele Python Twisted și cu implementarea evenimentelor în Tcl, dar bucla de evenimente din Node.js este ascunsă de dezvoltator și seamănă cu procesarea evenimentelor într-o aplicație web rulează în browser.

Sursa: opennet.ru

Adauga un comentariu