Server-side JavaScript-plattform Node.js 20.0 tilgjengelig

Node.js 20.0 ble utgitt, en plattform for å kjøre nettverksapplikasjoner i JavaScript. Node.js 20.0 er klassifisert som en langsiktig støttegren, men denne statusen vil bli tildelt først i oktober, etter stabilisering. Node.js 20.x støttes frem til 30. april 2026. Vedlikehold av den forrige LTS-grenen til Node.js 18.x vil vare til april 2025, og den før siste LTS-grenen 16.x til september 2023. 14.x LTS-grenen vil bli avviklet 30. april, og Node.js 19.x staging-grenen vil bli avviklet 1. juni.

Hovedforbedringer:

  • V8-motoren er oppdatert til versjon 11.3, brukt i Chromium 113. Endringer sammenlignet med Node.js 19-grenen, som brukte Chromium 107-motoren, inkluderer funksjonene String.prototype.isWellFormed og toWellFormed, Array.prototype og TypedArray. prototypemetoder for å jobbe med en kopi når du endrer Array- og TypedArray-objekter, "v"-flagget i RegExp, støtte for å endre størrelse på ArrayBuffer og øke størrelsen på SharedArrayBuffer, halerekursjon (tail-call) i WebAssembly.
  • En eksperimentell tillatelsesmodellmekanisme har blitt foreslått som tillater å begrense tilgangen til visse ressurser under utførelse. Tillatelse Modellstøtte aktiveres ved å spesifisere "--eksperimentell-tillatelse"-flagget når den kjøres. Den første implementeringen tilbyr muligheter for å begrense skrive- (--allow-fs-write) og lese- (--allow-fs-read) tilgang til visse deler av filsystemet, underordnede prosesser (--allow-child-process), og tillegg (--no-addons) ) og tråder (--allow-worker). For å tillate skriving til /tmp-katalogen og lesing av /home/index.js-filen, kan du for eksempel spesifisere: node —experimental-permission —allow-fs-write=/tmp/ —allow-fs-read=/home /index.js indeks .js

    For å sjekke tilgang, foreslås det å bruke process.permission.has()-metoden, for eksempel "process.permission.has('fs.write',"/tmp/test").

  • ECMAScript External Module (ESM)-behandlere lastet via "--experimental-loader"-alternativet kjøres nå i en separat tråd, isolert fra hovedtråden, og eliminerer skjæringspunktet mellom applikasjonskode og lastede ESM-moduler. I likhet med nettlesere kjøres import.meta.resolve()-metoden nå synkront når den kalles fra en applikasjon. I en av de neste grenene til Node.js er støtte for lasting av ESM planlagt å bli overført til kategorien stabile funksjoner.
  • Modulen node:test (test_runner), designet for å lage og kjøre tester i JavaScript som returnerer resultater i TAP-format (Test Anything Protocol), er gjort stabil.
  • Et eget utviklingsteam ble dannet med ansvar for ytelsesoptimalisering, som ved utarbeidelse av en ny gren jobbet for å øke hastigheten på ulike kjøretidskomponenter, inkludert URL-parsing, fetch() og EventTarget. For eksempel har overheaden til EventTarget-initialisering blitt halvert, ytelsen til URL.canParse()-metoden er betydelig forbedret, og effektiviteten til tidtakere er forbedret. Det inkluderer også utgivelsen av en høyytelses URL-parser, Ada 2.0, skrevet i C++.
  • Utviklingen av den eksperimentelle muligheten for å levere applikasjoner i form av en enkelt kjørbar fil (SEA, Single Executable Applications) fortsatte. Å lage en kjørbar fil krever nå å erstatte en blob generert fra en konfigurasjonsfil i JSON-format (i stedet for å erstatte en JavaScript-fil).
  • Forbedret kompatibilitet av Web Crypto API med implementeringer fra andre prosjekter.
  • Lagt til offisiell støtte for Windows på ARM64-systemer.
  • Implementeringen av støtte for WASI-utvidelser (WebAssembly System Interface) for å lage frittstående WebAssembly-applikasjoner har fortsatt. Fjernet behovet for å spesifisere et spesielt kommandolinjeflagg for å aktivere WASI-støtte.

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