Platforma serverului JavaScript Node.js 20.0 este disponibilă

A avut loc lansarea Node.js 20.0, o platformă pentru rularea aplicațiilor de rețea în limbajul JavaScript. Node.js 20.0 este atribuit ramurilor cu suport pe termen lung, dar acest statut va fi acordat abia în octombrie, după stabilizarea ei. Suportul pentru Node.js 20.x va fi asigurat până pe 30 aprilie 2026. Suportul pentru vechea ramură LTS Node.js 18.x va continua până în aprilie 2025, iar pentru ramura LTS 16.x va dura până în septembrie 2023. Suportul pentru ramura LTS 14.x se va încheia pe 30 aprilie, iar pentru ramura intermediară Node.js 19.x — pe 1 iunie.

Îmbunătățiri principale:

  • Motorul V8 a fost actualizat la versiunea 11.3, utilizat în Chromium 113. Printre modificările comparativ cu ramura Node.js 19, care folosea motorul Chromium 107, se remarcă funcțiile String.prototype.isWellFormed și toWellFormed, metodele Array.prototype și TypedArray.prototype pentru a lucra cu o copie la modificarea obiectelor Array și TypedArray, flagul „v” în RegExp, suportul pentru modificarea dimensiunii ArrayBuffer și creșterea dimensiunii SharedArrayBuffer, recursia în coadă (tail-call) în WebAssembly.
  • Предложен экспериментальный механизм Permission Model, позволяющий ограничить доступ к определённым ресурсам в процессе исполнения. Поддержка Permission Model включается через указание при запуске флага «—experimental-permission». В начальной реализации предложены опции для ограничения доступа на запись (—allow-fs-write) и чтение (—allow-fs-read) к определённым частям ФС, дочерним процессам (—allow-child-process), дополнениям (—no-addons) и потокам (—allow-worker). Например, чтобы разрешить запись в каталог /tmp и чтение файла /home/index.js можно указать: node —experimental-permission —allow-fs-write=/tmp/ —allow-fs-read=/home/index.js index.js

    Pentru verificarea accesului, se propune utilizarea metodei process.permission.has(), de exemplu, „process.permission.has(‘fs.write’, ‘/tmp/test’)”.

  • Handlerii modulelor externe ECMAScript (ESM), încărcați prin opțiunea „—experimental-loader”, sunt acum executați într-un fir separatat, izolat de firul principal, ceea ce elimină intersectarea codului aplicațiilor și modulelor ESM încărcate. În mod similar cu browserele, metoda import.meta.resolve() apelată din aplicație este acum executată în mod sincron. În una dintre următoarele ramuri Node.js, se preconizează că suportul pentru încărcarea ESM va fi transformat în capacități stabile.
  • Modulul node:test (test_runner), destinat creării și rulării testelor în limbajul JavaScript, a fost transformat în capabilitate stabilă, returnând rezultatul în format TAP (Test Anything Protocol).
  • A fost formată o echipă separată de dezvoltatori responsabilă pentru optimizarea performanței, care, în pregătirea unei noi ramuri, a lucrat la accelerarea diverselor componente runtime, inclusiv analiza URL-urilor, fetch() și EventTarget. De exemplu, cheltuielile de inițializare a EventTarget au fost reduse la jumătate, performanța metodei URL.canParse() a crescut semnificativ și eficiența funcționării temporizatoarelor a fost îmbunătățită. În plus, a fost inclusă lansarea unui parser URL de înaltă performanță — Ada 2.0, scris în limbajul C++.
  • S-a continuat dezvoltarea funcționalității experimentale pentru livrarea aplicațiilor sub formă de fișier executabil unic (SEA, Single Executable Applications). Crearea fișierului executabil necesită acum substituirea unui blob, generat pe baza unui fișier de configurare în format JSON (în locul înlocuirii fișierului JavaScript).
  • A fost îmbunătățită compatibilitatea API Web Crypto cu implementările din alte proiecte.
  • A fost adăugată suport oficial pentru Windows pe sistemele ARM64.
  • S-a continuat implementarea suportului pentru extensiile WASI (WebAssembly System Interface) pentru crearea aplicațiilor WebAssembly izolate. A fost eliminată necesitatea de a specifica un flag special în linia de comandă pentru a activa suportul WASI.

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