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

Node.js 21.0 blev frigivet, en platform til at køre netværksapplikationer i JavaScript. Node.js 21.0-grenen vil blive understøttet i 6 måneder. I de kommende dage vil stabiliseringen af ​​Node.js 20-grenen blive gennemført, som får LTS-status og vil blive understøttet indtil april 2026. Vedligeholdelse af den tidligere LTS-gren af ​​Node.js 18.0 varer indtil september 2025 og året før sidste LTS-gren 16.0 indtil april 2024.

Vigtigste forbedringer:

  • Fetch API'en er blevet erklæret stabil, designet til at indlæse ressourcer over netværket og forenkle skrivningen af ​​universel JavaScript-kode, der er egnet til at arbejde på server- og klientsiden. Implementeringen er baseret på kode fra HTTP/1.1 undici-klienten og er så tæt som muligt på den tilsvarende API, som findes i browsere. API'et inkluderer fetch()-metoden og Headers-objekter. Anmodning og svar, der repræsenterer HTTP-headerne, anmodning og svar. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
  • Understøttelse af WebStreams API, som giver adgang til datastrømme modtaget over netværket, er blevet stabiliseret. API'et gør det muligt at tilføje dine egne handlere, der arbejder med data, efterhånden som information ankommer over netværket, uden at vente på, at hele filen skal downloades. Objekter, der er tilgængelige i Node.js, inkluderer ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream og DecompressionStream.
  • Tilføjet eksperimentel implementering af WebSocket-klient, kompatibel med browsere. For at aktivere WebSocket-understøttelse leveres flaget "--experimental-websocket".
  • Tilføjet en eksperimentel tilstand til brug af standardimplementeringen af ​​JavaScript-moduler ESM (ECMAScript-moduler, brugt i moduler til browsere) i stedet for CommonJS (specifik for Node.js). Ændringen påvirker ikke moduler, hvis format er eksplicit defineret via "type"-feltet i package.json, angivet via flaget "--input-type", eller er tydeligt på grund af filtypenavnet (.mjs for ESM, .cjs for CommonJS). Moduler, der ikke udtrykkeligt er defineret som CommonJS (f.eks. har en ".js"-udvidelse), vil blive behandlet som ESM-moduler, når den nye tilstand er aktiveret. For at aktivere nye modulindstillinger er flaget "--eksperimentel-default-type" blevet foreslået.
  • V8-motoren er blevet opdateret til version 11.8, brugt i Chromium 118, som nu understøtter ArrayBuffer.prototype.transfer-metoden, muligheden for at gruppere arrays (groupBy-metoden) og WebAssembly-instruktioner til behandling af konstanter (i32.add, i32.sub, i32.mul, i64.add, i64.sub og i64.mul).
  • Support til den globale Preload-handler er blevet afbrudt til fordel for registrering og initialisering af opkald til konfigurering af moduler.
  • En "flush"-indstilling er blevet tilføjet til fs.writeFile-funktionen for at tvinge data til at blive tømt til drevet efter hver skriveoperation.
  • Forbedret ydeevne af kode relateret til URL-parsing, hente API, streams, node:fs og HTTP.
  • Tilføjet globalt navigatorobjekt. For at få data om antallet af CPU-kerner kan du f.eks. bruge egenskaben navigator.hardwareConcurrency.
  • I parameteren "—test" er der tilføjet understøttelse af glob-masker til valg af test, der skal køres (du kan f.eks. angive "—test **/*.test.js.").
  • Den medfølgende pakkehåndtering npm 10.2.0 og llhttp 9.1.2-parseren er blevet opdateret.
  • Support til Visual Studio 2019 og versioner af macOS ældre end 11.0 er afbrudt.

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