Platforma server-side JavaScript Node.js 21.0 este disponibilă.

A avut loc lansarea Node.js 21.0, o platformă pentru executarea aplicațiilor de rețea în limbajul JavaScript. Suportul pentru rama Node.js 21.0 va fi asigurat timp de 6 luni. În următoarele zile, va fi finalizată stabilizarea ramurii Node.js 20, care va obține statutul LTS și va fi suportată până în aprilie 2026. Suportul pentru fosta ramură LTS Node.js 18.0 va continua până în septembrie 2025, iar pentru ramura LTS precedentă 16.0 până în aprilie 2024.

Îmbunătățiri principale:

  • A fost anunțat API-ul stabil Fetch, destinat încărcării resurselor prin rețea și facilitând scrierea de cod JavaScript universal, potrivit pentru execuție atât pe server, cât și pe client. Implementarea se bazează pe codul din clientul HTTP/1.1 undici și este maxim apropiată de un API similar furnizat în browsere. API-ul include metoda fetch() și obiectele Headers, Request și Response, care reprezintă anteturile HTTP, cererea și răspunsul. const res = await fetch(‘https://nodejs.org/api/documentation.json’); if (res.ok) { const data = await res.json(); console.log(data); }
  • A fost stabilizată suportul pentru API-ul WebStreams, care oferă acces la fluxurile de date primite prin rețea. API-ul permite adăugarea propriilor manipulatoare care operează cu datele pe măsură ce informațiile sunt primite, fără a aștepta încărcarea întregului fișier. În Node.js sunt disponibile obiecte precum ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream și DecompressionStream.
  • A fost adăugată o implementare experimentală a clientului WebSocket, compatibilă cu browserele. Pentru activarea suportului WebSocket, este prevăzut un flag „—experimental-websocket”.
  • A fost adăugat un mod experimental de utilizare implicită a implementării modulelor JavaScript ESM (ECMAScript Modules, folosit în modulele pentru browsere) în loc de CommonJS (specific pentru Node.js). Schimbarea nu afectează modulele a căror format este definit explicit prin câmpul „type” în package.json, stabilit prin flagul „—input-type” sau evident din cauza extensiei fișierului (.mjs pentru ESM, .cjs pentru CommonJS). De asemenea, modulele care nu sunt definite explicit ca fiind CommonJS (de exemplu, care au extensia „.js”), atunci când noul mod este activat, vor fi considerate module ESM. Pentru activarea noilor setări ale modulelor, a fost propus flagul „—experimental-default-type”.
  • Motorul V8 a fost actualizat la versiunea 11.8, utilizată în Chromium 118, în care a fost adăugată suport pentru metoda ArrayBuffer.prototype.transfer, capacitatea de grupare a array-urilor (metoda groupBy) și instrucțiunile WebAssembly pentru procesarea constantelor (i32.add, i32.sub, i32.mul, i64.add, i64.sub și i64.mul).
  • Suportul pentru handlerul globalPreload a fost abandonat, înlocuindu-l cu apelurile register și initialize pentru configurarea modulelor.
  • Funcției fs.writeFile i s-a adăugat opțiunea „flush” pentru a forța scrierea datelor pe dispozitiv după fiecare operațiune de scriere.
  • Performanța codului legat de analiza URL-urilor, API fetch, fluxuri, node:fs și HTTP a fost îmbunătățită.
  • A fost adăugat obiectul global navigator. De exemplu, pentru a obține informații despre numărul de nuclee CPU, se poate utiliza proprietatea navigator.hardwareConcurrency.
  • În parametrul „—test” a fost adăugată suport pentru măștile glob pentru a selecta testele care urmează a fi rulate (de exemplu, se poate specifica „—test **/*.test.js”).
  • Au fost actualizate pachetul manager npm 10.2.0 și parserul llhttp 9.1.2 incluse în pachet.
  • Suportul pentru Visual Studio 2019 și versiunile macOS mai vechi de 11.0 a fost abandonat.

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

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