Platforma JavaScript pe partea de server Node.js 20.0 disponibilă

A avut loc lansarea Node.js 20.0, o platformă pentru executarea aplicațiilor de rețea în JavaScript. Node.js 20.0 a fost alocat ramului de suport lung, dar acest statut nu va fi atribuit până în octombrie, după stabilizare. Node.js 20.x va fi acceptat până la 30 aprilie 2026. Întreținerea ramurii anterioare Node.js 18.x LTS va dura până în aprilie 2025, iar ramura anterioară 16.x LTS până în septembrie 2023. Ramura 14.x LTS va fi menținută pe 30 aprilie, iar ramura interimară Node.js 19.x pe 1 iunie.

Principalele îmbunătățiri:

  • Motorul V8 a fost actualizat la versiunea 11.3, care este utilizată în Chromium 113. Dintre modificările în comparație cu ramura Node.js 19, care a folosit motorul Chromium 107, funcțiile String.prototype.isWellFormed și toWellFormed, Array.prototype și metodele TypedArray.prototype pentru a lucra cu copierea la modificarea obiectelor Array și TypedArray, flag „v” în RegExp, suport pentru redimensionarea ArrayBuffer și creșterea dimensiunii SharedArrayBuffer, apel de coadă în WebAssembly.
  • Este propus un mecanism experimental de model de permisiuni care vă permite să restricționați accesul la anumite resurse în timpul execuției. Suportul modelului de permisiuni este activat prin specificarea indicatorului „--experimental-permission” atunci când rulează. În implementarea inițială, au fost propuse opțiuni pentru a restricționa accesul de scriere (--allow-fs-write) și citire (--allow-fs-read) la anumite părți ale FS, procese copil (--allow-child-process) , suplimente (--no-addons ) și fire (--allow-worker). De exemplu, pentru a permite scrierea în directorul /tmp și citirea fișierului /home/index.js, puteți specifica: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js index .js

    Pentru a verifica accesul, se recomandă utilizarea metodei process.permission.has(), de exemplu, „process.permission.has('fs.write',”/tmp/test”).

  • Handlerele pentru modulele externe ECMAScript (ESM) încărcate prin opțiunea „--experimental-loader” sunt acum executate într-un fir separat, izolat de firul principal, ceea ce elimină intersecția codului aplicației și a modulelor ESM încărcate. Similar cu browserele, metoda import.meta.resolve() se execută acum sincron atunci când este apelată dintr-o aplicație. Într-una dintre următoarele ramuri ale Node.js, suportul de încărcare ESM este planificat să fie mutat în categoria de caracteristici stabile.
  • Modulul node:test (test_runner), conceput pentru a crea și rula teste JavaScript care returnează rezultate în format TAP (Test Anything Protocol), a fost mutat în stabil.
  • A fost formată o echipă de performanță separată, care, în pregătirea pentru noua ramură, a lucrat pentru a accelera diverse componente de rulare, inclusiv analiza URL, fetch() și EventTarget. De exemplu, costul general de inițializare a EventTarget a fost redus la jumătate, performanța metodei URL.canParse() a fost îmbunătățită semnificativ și eficiența temporizatoarelor a fost îmbunătățită. În plus, în compoziție este inclusă lansarea unui parser URL de înaltă performanță - Ada 2.0, scris în C++.
  • Dezvoltarea unei caracteristici experimentale pentru livrarea aplicațiilor sub forma unui singur fișier executabil (SEA, Single Executable Applications) a continuat. Crearea unui executabil necesită acum înlocuirea unui blob generat dintr-un fișier de configurare JSON (în loc să înlocuiți un fișier JavaScript).
  • Compatibilitate îmbunătățită a API-ului Web Crypto cu implementările din alte proiecte.
  • S-a adăugat suport oficial pentru Windows pe sistemele ARM64.
  • Suport continuu pentru extensiile WASI (WebAssembly System Interface) pentru crearea de aplicații WebAssembly autonome. S-a eliminat necesitatea de a specifica un flag special pentru linia de comandă pentru a activa suportul WASI.

Platforma Node.js poate fi utilizată atât pentru întreținerea pe server a aplicațiilor Web, cât și pentru crearea de programe obișnuite de rețea client și server. Pentru a extinde funcționalitatea aplicațiilor pentru Node.js, a fost pregătită o colecție mare de module, în care puteți găsi module cu implementare HTTP, SMTP, XMPP, DNS, FTP, IMAP, servere și clienți POP3, module pentru integrare cu diverse cadre web, handlere WebSocket și Ajax, conectori DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motoare de șabloane, motoare CSS, implementări de algoritmi cripto și sisteme de autorizare (OAuth), parsere XML.

Pentru a asigura procesarea unui număr mare de solicitări paralele, Node.js folosește un model de execuție a codului asincron bazat pe gestionarea evenimentelor neblocante și pe definiția handlerelor de apel invers. Metodele acceptate pentru multiplexarea conexiunilor sunt epoll, kqueue, /dev/poll și select. Pentru multiplexarea conexiunii, se folosește biblioteca libuv, care este un add-on pentru libev pe sisteme Unix și 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 în modul neblocant. Toate apelurile de sistem care provoacă blocare sunt executate în interiorul pool-ului de fire și apoi, ca și manipulatorii de semnal, transferă rezultatul muncii lor înapoi printr-o conductă (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).

La bază, Node.js este similar cu Perl AnyEvent, Ruby Event Machine, cadrele Python Twisted și implementarea evenimentului Tcl, dar bucla de evenimente din Node.js este ascunsă de dezvoltator și seamănă cu gestionarea evenimentelor într-o aplicație web care rulează în browser. Când scrieți aplicații pentru node.js, trebuie să luați în considerare specificul programării bazate pe evenimente, de exemplu, în loc să faceți „var result = db.query(”select..”);” cu așteptarea finalizării lucrărilor și procesarea ulterioară a rezultatelor, Node.js folosește principiul execuției asincrone, adică. codul este transformat în „db.query(”select..”, function (result) {result processing});”, în care controlul va trece instantaneu la codul suplimentar, iar rezultatul interogării va fi procesat pe măsură ce sosesc datele.

Sursa: opennet.ru

Adauga un comentariu