Server-side JavaScript-plattform Node.js 21.0 tilgjengelig

Node.js 21.0 ble utgitt, en plattform for å kjøre nettverksapplikasjoner i JavaScript. Node.js 21.0-grenen støttes i 6 måneder. I de kommende dagene vil stabiliseringen av Node.js 20-grenen fullføres, som vil få LTS-status og støttes frem til april 2026. Vedlikehold av den forrige LTS-grenen til Node.js 18.0 vil vare til september 2025, og året før siste LTS-gren 16.0 til april 2024.

Hovedforbedringer:

  • Fetch API har blitt erklært stabil, designet for å laste ressurser over nettverket og forenkle skrivingen av universell JavaScript-kode som er egnet for arbeid på server- og klientsiden. Implementeringen er basert på kode fra HTTP/1.1 undici-klienten og er så nært som mulig til den lignende API-en som tilbys i nettlesere. API-en inkluderer fetch()-metoden og Headers-objekter. Forespørsel og svar, som representerer HTTP-hodene, forespørselen og svaret. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
  • Støtte for WebStreams API, som gir tilgang til datastrømmer mottatt over nettverket, er stabilisert. API-en gjør det mulig å legge til egne behandlere som jobber med data etter hvert som informasjon kommer over nettverket, uten å vente på at hele filen skal lastes ned. Objekter som er tilgjengelige i Node.js inkluderer ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream og DecompressionStream.
  • Lagt til eksperimentell implementering av WebSocket-klient, kompatibel med nettlesere. For å aktivere WebSocket-støtte, er flagget "--experimental-websocket" gitt.
  • Lagt til en eksperimentell modus for bruk av standardimplementeringen av JavaScript-moduler ESM (ECMAScript-moduler, brukt i moduler for nettlesere) i stedet for CommonJS (spesifikt for Node.js). Endringen påvirker ikke moduler hvis format er eksplisitt definert via "type"-feltet i package.json, spesifisert via flagget "--input-type", eller er åpenbart på grunn av filtypen (.mjs for ESM, .cjs for CommonJS). Imidlertid vil moduler som ikke er eksplisitt definert som CommonJS (for eksempel har en ".js"-utvidelse) behandles som ESM-moduler når den nye modusen er aktivert. For å aktivere nye modulinnstillinger har flagget "--eksperimentell-standardtype" blitt foreslått.
  • V8-motoren er oppdatert til versjon 11.8, brukt i Chromium 118, som nå støtter ArrayBuffer.prototype.transfer-metoden, muligheten til å gruppere arrays (groupBy-metoden) og WebAssembly-instruksjoner for behandling av konstanter (i32.add, i32.sub, i32.mul, i64.add, i64.sub og i64.mul).
  • Støtte for den globale Preload-behandleren er avviklet, til fordel for registrering og initialisering av anrop for å konfigurere moduler.
  • Et "flush"-alternativ er lagt til fs.writeFile-funksjonen for å tvinge data til å skylles til stasjonen etter hver skriveoperasjon.
  • Forbedret ytelse av kode relatert til URL-parsing, hente-API, strømmer, node:fs og HTTP.
  • Lagt til globalt navigatorobjekt. For å få data om antall CPU-kjerner kan du for eksempel bruke egenskapen navigator.hardwareConcurrency.
  • I «—test»-parameteren er støtte for globmasker lagt til for å velge tester som skal kjøres (du kan for eksempel spesifisere «—test **/*.test.js.»).
  • Den medfølgende pakkebehandlingen npm 10.2.0 og llhttp 9.1.2-parseren er oppdatert.
  • Støtte for Visual Studio 2019 og versjoner av macOS eldre enn 11.0 er avviklet.

Node.js-plattformen kan brukes både for serversidestøtte av webapplikasjoner, og for å lage vanlige klient- og servernettverksprogrammer. For å utvide funksjonaliteten til applikasjoner for Node.js er det utarbeidet en stor samling av moduler, der du kan finne moduler med implementering av HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3-servere og klienter, moduler for integrasjon med ulike web-rammeverk, WebSocket- og Ajax-behandlere , koblinger til DBMS (MySQL, PostgreSQL, SQLite, MongoDB), malmotorer, CSS-motorer, implementeringer av kryptografiske algoritmer og autorisasjonssystemer (OAuth), XML-parsere.

For å håndtere et stort antall parallelle forespørsler, bruker Node.js en asynkron kodeutførelsesmodell basert på ikke-blokkerende hendelsesbehandling og definering av tilbakeringingsbehandlere. Støttede metoder for multipleksing av tilkoblinger inkluderer epoll, kqueue, /dev/poll og select. For å multiplekse tilkoblinger brukes libuv-biblioteket, som er et tillegg til libev på Unix-systemer og til IOCP på Windows. Libeio-biblioteket brukes til å lage en trådpool, og c-ares er integrert for å utføre DNS-spørringer i en ikke-blokkerende modus. Alle systemanrop som forårsaker blokkering utføres i trådbasen og sender deretter, i likhet med signalbehandlere, resultatet av arbeidet tilbake gjennom et ikke navngitt rør. Utførelse av JavaScript-kode sikres gjennom bruk av V8-motoren utviklet av Google (i tillegg utvikler Microsoft en versjon av Node.js med Chakra-Core-motoren).

I kjernen ligner Node.js på Perl AnyEvent, Ruby Event Machine, Python Twisted-rammeverket og implementeringen av hendelser i Tcl, men hendelsesløkken i Node.js er skjult for utvikleren og ligner hendelsesbehandling i en nettapplikasjon kjører i nettleseren. Når du skriver applikasjoner for node.js, er det nødvendig å ta hensyn til detaljene ved hendelsesdrevet programmering, for eksempel, i stedet for å gjøre "var result = db.query("select..");" med å vente på ferdigstillelse av arbeidet og påfølgende behandling av resultatene, bruker Node.js prinsippet om asynkron utførelse, dvs. koden transformeres til "db.query("velg..", funksjon (resultat) {resultatbehandling});", der kontrollen umiddelbart vil gå over til videre kode, og søkeresultatet vil bli behandlet etter hvert som data kommer.

Kilde: opennet.ru

Legg til en kommentar