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

Node.js 18.0 blev frigivet, en platform til at køre netværksapplikationer i JavaScript. Node.js 18.0 er klassificeret som en langsigtet supportgren, men denne status vil først blive tildelt i oktober efter stabilisering. Node.js 18.x vil blive understøttet indtil april 2025. Vedligeholdelse af den tidligere LTS-gren af ​​Node.js 16.x vil vare indtil april 2024 og året før sidste LTS-gren 14.x indtil april 2023. 12.x LTS-grenen vil blive afbrudt den 30. april, og Node.js 17.x staging-grenen vil blive afbrudt den 1. juni.

Vigtigste forbedringer:

  • V8-motoren er blevet opdateret til version 10.1, som bruges i Chromium 101. Sammenlignet med 17.9.0-udgivelsen af ​​Node.js er der nu understøttelse af funktioner som findLast- og findLastIndex-metoderne til at finde elementer i forhold til slutningen af et array og funktionen Intl.supportedValuesOf. Forbedret Intl.Locale API. Initialiseringen af ​​klassefelter og private metoder er blevet fremskyndet.
  • Den eksperimentelle fetch() API er som standard aktiveret, designet til at indlæse ressourcer over netværket. Implementeringen er baseret på koden fra HTTP/1.1 undici-klienten og er så tæt som muligt på den tilsvarende API, som findes i browsere. Dette inkluderer understøttelse af FormData, Headers, Request og Response-grænseflader til at manipulere HTTP-anmodnings- og svarheadere. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
  • En eksperimentel implementering af Web Streams API er blevet tilføjet, som giver adgang til datastrømme modtaget over netværket. API'et gør det muligt at tilføje dine egne behandlere til at arbejde med data, efterhånden som information ankommer over netværket, uden at vente på, at hele filen skal downloades. Objekter, der nu er tilgængelige i Node.js, inkluderer ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream og DecompressionStream.
  • Blob API er blevet flyttet til stabil, så du kan indkapsle uforanderlige rådata til sikker brug i forskellige arbejdstråde.
  • BroadcastChannel API'en er blevet gjort stabil, så du kan organisere udvekslingen af ​​meddelelser i asynkron tilstand i formatet "én afsender - mange modtagere".
  • Tilføjet eksperimentel modul node:test til at oprette og køre test i JavaScript, der returnerer resultater i TAP-format (Test Anything Protocol).
  • Genereringen af ​​færdige assemblies til Red Hat Enterprise Linux (RHEL) 8 og andre distributioner baseret på Glibc 2.28+, inklusive Debian 10 og Ubuntu 20.04, samt til macOS 10.15+ leveres. På grund af problemer med V8-motorbygningen er oprettelsen af ​​32-bit builds til Windows midlertidigt stoppet.
  • Tilvejebragt en eksperimentel mulighed for at bygge en Node.js eksekverbar med brugervalgte komponenter initialiseret ved opstart. For at definere startkomponenterne er "--node-snapshot-main"-indstillingen blevet tilføjet til configure build-scriptet, for eksempel "./configure —node-snapshot-main=marked.js; navneknude"

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