JavaScript-platform Node.js 22.0.0 tilgængelig

Node.js 22.0 blev frigivet, en platform til at køre netværksapplikationer i JavaScript. Node.js 22.0 er klassificeret som en langsigtet supportgren, men denne status vil først blive tildelt i oktober efter stabilisering. Node.js 22.x vil blive understøttet indtil den 30. april 2027. Vedligeholdelse af den tidligere LTS-gren af ​​Node.js 20.x varer indtil april 2026 og året før sidste LTS-gren 18.x indtil april 2025. Staging-grenen af ​​Node.js 21.x vil blive afbrudt den 1. juni 2024.

Vigtigste forbedringer:

  • V8-motoren er blevet opdateret til version 12.4, brugt i Chromium 124. Blandt ændringerne i forhold til Node.js 21-grenen, som brugte V8 11.8-motoren), bemærkes:
    • Understøttelse af WasmGC-udvidelsen, som forenkler porteringen af ​​programmer skrevet på programmeringssprog, der bruger en skraldeopsamler (Kotlin, PHP, Java osv.) til WebAssembly. WasmGC tilføjer nye typer strukturer og arrays, der kan bruge ikke-lineær hukommelsesallokering.
    • Understøttelse af Array.fromAsync()-metoden, som asynkront returnerer en ny forekomst af et Array-objekt kopieret fra et array-lignende, iterbart eller asynkron iterbart objekt.
    • Understøttelse af iteratormetoder såsom .map, .filter, .find, .take, .drop, .forEach og .reduce.
    • Understøttelse af et sæt-objekt, der definerer en samling af værdier og tilbyder metoder, der implementerer fælles sæt-operationer, såsom skæring, forening, forskel og addition.
  • Maglev-optimerende JIT-kompileren er aktiveret som standard, med det formål hurtigt at generere højtydende maskinkode til meget brugt JavaScript-kode. Aktivering af Maglev kan markant fremskynde kortlivede CLI-applikationer, der ikke udfører langsigtede operationer, for eksempel reduceres tiden til at gennemføre Jetstrea-testen med 7.5 %, og Speedometer-testen med 5 %.
  • Arbejdet med streams er blevet fremskyndet ved at øge værdien af ​​highWaterMark-muligheden fra 16 KB til 65 KB (definerer grænsen, op til hvilken optagelse er bufferet). Ændringen resulterer i øget hukommelsesforbrug, så applikationer, der er designet til at køre på begrænset RAM, skal muligvis vende tilbage til den gamle værdi via et kald til setDefaultHighWaterMark().
  • Forbedret ydeevne af fetch()- og testløber-API'erne ved at gøre AbortSignal-instansering mere effektiv. Ydeevnen af ​​API'er relateret til synkront arbejde med filsystemer er blevet forbedret.
  • En eksperimentel funktion er blevet leveret til at bruge "require()"-kaldet til at indlæse JavaScript ESM-moduler (ECMAScript-moduler) i synkron tilstand. ESM-moduler bruges i browsere og erstatter CommonJS-moduler, der er specifikke for Node.js. For at indlæse via "require()", skal ESM-modulet udføres i synkron tilstand (uden at vente på øverste niveau). Support er aktiveret via flaget "--eksperimentelt-kræver-modul".
  • Tilføjet eksperimentel mulighed for at køre scripts defineret i filen package.json ved hjælp af kommandoen "--run" "
  • Kommandoen "node -watch" er blevet flyttet til den stabile kategori med implementering af en overvågningstilstand, der sikrer, at processen genstartes, når den importerede fil ændres (f.eks. hvis "node -watch index.js" udføres, processen genstartes automatisk, når index.js ændres).
  • Den oprindelige implementering af WebSocket API er blevet stabiliseret, så WebSocket kan bruges i klienttilstand uden at installere yderligere afhængigheder.
  • Tilføjet delvis understøttelse af Navigator API.
  • Webstreams API har tilføjet understøttelse af deflate-raw-komprimeringsformatet.
  • Tilføjet glob- og globSync-funktioner til node:fsmodule til mønstermatchning af filstier.
  • Forbedret håndtering af forkert konfigurerede IPv6-stakke. Implementeret Happy Eyeballs-algoritme for hurtig tilbagerulning i tilfælde af problemer med IPv6-drift.
  • util API er blevet forældet.
  • Opdaterede afhængighedsversioner: 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 til 3.8.0, ada 2.7.7 og und 6.6.0. .

Node.js-platformen kan bruges både til server-side support af webapplikationer og til at oprette standard klient- og server-side netværksprogrammer. For at udvide funktionaliteten af ​​Node.js-applikationer er der udarbejdet en stor samling af moduler, herunder dem der implementerer servere og klienter til HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduler til integration med forskellige webframeworks, WebSocket- og Ajax-handlere, forbindelser til DBMS (MySQL, PostgreSQL, SQLite, MongoDB), skabelonmotorer, CSS-motorer, implementeringer af kryptografiske algoritmer og autorisationssystemer (OAuth), XML-parsere.

For at håndtere et stort antal parallelle anmodninger, bruger Node.js en asynkron kodeeksekveringsmodel baseret på ikke-blokerende hændelsesbehandling og definering af tilbagekaldsbehandlere. Understøttede metoder til multipleksing af forbindelser inkluderer epoll, kqueue, /dev/poll og select. Til forbindelsesmultipleksing bruges libuv-biblioteket, som er en tilføjelse til libev på Unix-systemer og til IOCP på Windows. Libeio-biblioteket bruges til at oprette en trådpulje, og c-ares er integreret til at udføre DNS-forespørgsler i en ikke-blokerende tilstand. Alle systemkald, der forårsager blokering, udføres i trådpuljen og sender derefter, ligesom signalbehandlere, resultatet af deres arbejde tilbage gennem et unavngivet rør.

Udførelse af JavaScript-kode sikres ved brug af V8-motoren udviklet af Google (derudover udvikler Microsoft en version af Node.js med Chakra-Core-motoren). I sin kerne ligner Node.js Perl AnyEvent, Ruby Event Machine, Python Twisted frameworks og implementeringen af ​​begivenheder i Tcl, men begivenhedsløkken i Node.js er skjult for udvikleren og ligner begivenhedsbehandling i en webapplikation kører i browser.

Kilde: opennet.ru

Tilføj en kommentar