Server-side JavaScript-platform Node.js 20.0 tilgængelig

Udgivelsen af ​​Node.js 20.0, en platform til at udføre netværksapplikationer i JavaScript, har fundet sted. Node.js 20.0 er blevet tildelt den lange supportgren, men denne status vil først blive tildelt i oktober efter stabilisering. Node.js 20.x vil blive understøttet indtil den 30. april 2026. Vedligeholdelse af den tidligere Node.js 18.x LTS-gren vil vare indtil april 2025, og den tidligere 16.x LTS-gren indtil september 2023. 14.x LTS-filialen vil blive vedligeholdt den 30. april, og den midlertidige Node.js 19.x-filial den 1. juni.

Vigtigste forbedringer:

  • V8-motoren er blevet opdateret til version 11.3, som bruges i Chromium 113. Af ændringerne sammenlignet med Node.js 19-grenen, som brugte Chromium 107-motoren, String.prototype.isWellFormed og toWellFormed-funktionerne, Array.prototype og TypedArray.prototype-metoder til at arbejde med kopi ved ændring af Array- og TypedArray-objekter, "v"-flag i RegExp, understøttelse af størrelse på ArrayBuffer og forøgelse af størrelsen på SharedArrayBuffer, tail-call i WebAssembly.
  • Der foreslås en eksperimentel tilladelsesmodelmekanisme, der giver dig mulighed for at begrænse adgangen til visse ressourcer under udførelsen. Tilladelse Modelunderstøttelse aktiveres ved at angive flaget "--eksperimentel-tilladelse", når den kører. I den indledende implementering blev der foreslået muligheder for at begrænse skrive- (--allow-fs-write) og læse- (--allow-fs-read) adgang til visse dele af FS, underordnede processer (--allow-child-process) , tilføjelser (--no-addons ) og tråde (--allow-worker). For at tillade skrivning til mappen /tmp og læsning af filen /home/index.js kan du f.eks. angive: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js indeks .js

    For at kontrollere adgangen, foreslås det at bruge process.permission.has() metoden, for eksempel "process.permission.has('fs.write',"/tmp/test").

  • Handlere for ECMAScript eksterne moduler (ESM'er), der indlæses via "--eksperimentel-loader"-indstillingen, udføres nu i en separat tråd, isoleret fra hovedtråden, hvilket eliminerer skæringspunktet mellem applikationskode og indlæste ESM-moduler. I lighed med browsere udføres import.meta.resolve()-metoden nu synkront, når den kaldes fra et program. I en af ​​de næste grene af Node.js er ESM-indlæsningsstøtte planlagt til at blive flyttet til kategorien stabile funktioner.
  • Modulet node:test (test_runner), designet til at oprette og køre JavaScript-test, der returnerer resultater i TAP-format (Test Anything Protocol), er blevet flyttet til stabilt.
  • Der er dannet et separat performance-team, som som forberedelse til den nye filial har arbejdet på at fremskynde forskellige runtime-komponenter, herunder URL-parsing, fetch() og EventTarget. For eksempel er overheaden ved initialisering af EventTarget blevet halveret, ydeevnen af ​​URL.canParse()-metoden er blevet væsentligt forbedret, og effektiviteten af ​​timerne er blevet forbedret. Derudover er udgivelsen af ​​en højtydende URL-parser - Ada 2.0, skrevet i C ++, inkluderet i sammensætningen.
  • Udviklingen af ​​en eksperimentel funktion til levering af applikationer i form af en enkelt eksekverbar fil (SEA, Single Executable Applications) er fortsat. Oprettelse af en eksekverbar fil kræver nu at erstatte en blob, der er genereret fra en JSON-konfigurationsfil (i stedet for at erstatte en JavaScript-fil).
  • Forbedret Web Crypto API-kompatibilitet med implementeringer fra andre projekter.
  • Tilføjet officiel support til Windows på ARM64-systemer.
  • Fortsat understøttelse af WASI-udvidelser (WebAssembly System Interface) til oprettelse af selvstændige WebAssembly-applikationer. Fjernet behovet for at angive et særligt kommandolinjeflag for at aktivere WASI-understøttelse.

Node.js platformen kan bruges både til servervedligeholdelse af webapplikationer og til at skabe almindelige klient- og servernetværksprogrammer. For at udvide funktionaliteten af ​​applikationer til Node.js er der udarbejdet en stor samling af moduler, hvori du kan finde moduler med implementering af HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 servere og klienter, moduler til integration med forskellige web-frameworks, WebSocket- og Ajax-handlere, DBMS-connectors (MySQL, PostgreSQL, SQLite, MongoDB), skabelonmotorer, CSS-motorer, implementeringer af kryptoalgoritmer og autorisationssystemer (OAuth), XML-parsere.

For at sikre behandlingen af ​​et stort antal parallelle anmodninger, bruger Node.js en asynkron kodeeksekveringsmodel baseret på ikke-blokerende hændelseshåndtering og definitionen af ​​tilbagekaldsbehandlere. Understøttede metoder til multipleksing af forbindelser er epoll, kqueue, /dev/poll og select. Til forbindelsesmultipleksing bruges libuv-biblioteket, som er en tilføjelse til libev på Unix-systemer og 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 ikke-blokerende tilstand. Alle systemkald, der forårsager blokering, udføres inde i trådpuljen og overfører derefter, ligesom signalbehandlere, resultatet af deres arbejde tilbage gennem et unavngivet rør (rør). Udførelsen af ​​JavaScript-kode leveres gennem brugen 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 Tcl-begivenhedsimplementeringen, men hændelsesløkken i Node.js er skjult for udvikleren og ligner hændelseshåndtering i en webapplikation, der kører i browser. Når du skriver applikationer til node.js, skal du tage højde for de særlige forhold ved begivenhedsdrevet programmering, for eksempel i stedet for at gøre "var result = db.query("select..");" med afventning af afslutning af arbejde og efterfølgende behandling af resultater, anvender Node.js princippet om asynkron eksekvering, dvs. koden transformeres til "db.query("vælg..", funktion (resultat) {resultatbehandling});", hvor kontrollen øjeblikkeligt overføres til yderligere kode, og forespørgselsresultatet vil blive behandlet efterhånden som data ankommer.

Kilde: opennet.ru

Tilføj en kommentar