Server-side JavaScript-plattform Node.js 18.0 är tillgänglig

Node.js 18.0 släpptes, en plattform för att köra nätverksapplikationer i JavaScript. Node.js 18.0 klassificeras som en långsiktig supportgren, men denna status kommer att tilldelas först i oktober, efter stabilisering. Node.js 18.x kommer att stödjas fram till april 2025. Underhållet av den tidigare LTS-grenen av Node.js 16.x kommer att pågå till april 2024, och föregående år LTS-gren 14.x till april 2023. 12.x LTS-grenen kommer att avvecklas den 30 april, och Node.js 17.x staging-grenen kommer att avvecklas den 1 juni.

Huvudsakliga förbättringar:

  • V8-motorn har uppdaterats till version 10.1, som används i Chromium 101. Jämfört med 17.9.0-utgåvan av Node.js finns det nu stöd för funktioner som findLast- och findLastIndex-metoderna för att hitta element i förhållande till slutet av en array och funktionen Intl.supportedValuesOf. Förbättrat Intl.Locale API. Initieringen av klassfält och privata metoder har påskyndats.
  • Den experimentella fetch() API är aktiverad som standard, designad för att ladda resurser över nätverket. Implementeringen är baserad på kod från HTTP/1.1 undici-klienten och är så nära som möjligt den liknande API som tillhandahålls i webbläsare. Detta inkluderar stöd för gränssnitten FormData, Headers, Request och Response för att manipulera HTTP-begäran och svarshuvuden. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
  • En experimentell implementering av Web Streams API har lagts till, vilket ger tillgång till dataströmmar som tas emot över nätverket. API:et gör det möjligt att lägga till egna hanterare för att arbeta med data när information kommer över nätverket, utan att vänta på att hela filen ska laddas ner. Objekt som nu är tillgängliga i Node.js inkluderar ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream och DecompressionStream.
  • Blob API har flyttats till stabil, så att du kan kapsla in oföränderlig rådata för säker användning i olika arbetstrådar.
  • BroadcastChannel API har gjorts stabil, så att du kan organisera utbyte av meddelanden i asynkront läge i formatet "en avsändare - många mottagare".
  • Lade till experimentell modul node:test för att skapa och köra tester i JavaScript som returnerar resultat i TAP-format (Test Anything Protocol).
  • Genereringen av färdiga sammansättningar för Red Hat Enterprise Linux (RHEL) 8 och andra distributioner baserade på Glibc 2.28+, inklusive Debian 10 och Ubuntu 20.04, samt för macOS 10.15+ tillhandahålls. På grund av problem med V8-motorbygget har skapandet av 32-bitarsbyggen för Windows tillfälligt stoppats.
  • Tillhandahöll ett experimentellt alternativ för att bygga en Node.js körbar med användarvalda komponenter initierade vid start. För att definiera startkomponenterna har alternativet "--node-snapshot-main" lagts till i konfigureringsskriptet, till exempel "./configure —node-snapshot-main=marked.js; namnnod"

Node.js-plattformen kan användas både för serverunderhåll av webbapplikationer och för att skapa vanliga klient- och servernätverksprogram. För att utöka funktionaliteten av applikationer för Node.js har en stor samling av moduler utarbetats, där du kan hitta moduler med implementering av HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3-servrar och klienter, moduler för integration med olika webbramverk, WebSocket- och Ajax-hanterare, DBMS-anslutningar (MySQL, PostgreSQL, SQLite, MongoDB), mallmotorer, CSS-motorer, implementeringar av kryptoalgoritmer och auktoriseringssystem (OAuth), XML-parsers.

För att säkerställa bearbetningen av ett stort antal parallella förfrågningar använder Node.js en asynkron kodexekveringsmodell baserad på icke-blockerande händelsehantering och definitionen av callback-hanterare. Metoder som stöds för multiplexering av anslutningar är epoll, kqueue, /dev/poll och select. För anslutningsmultiplexering används libuv-biblioteket, som är ett tillägg för libev på Unix-system och IOCP på Windows. Libeio-biblioteket används för att skapa en trådpool, och c-ares är integrerad för att utföra DNS-frågor i icke-blockerande läge. Alla systemanrop som orsakar blockering exekveras inne i trådpoolen och överför sedan, liksom signalhanterare, resultatet av sitt arbete tillbaka genom ett namnlöst rör (pipe). Exekveringen av JavaScript-kod tillhandahålls genom användningen av V8-motorn som utvecklats av Google (dessutom utvecklar Microsoft en version av Node.js med Chakra-Core-motorn).

I sin kärna liknar Node.js Perl AnyEvent, Ruby Event Machine, Python Twisted och implementeringen av Tcl-händelser, men händelseslingan i Node.js är dold för utvecklaren och liknar händelsehantering i en webbapplikation som körs i webbläsaren. När du skriver applikationer för node.js måste du ta hänsyn till detaljerna för händelsestyrd programmering, till exempel istället för att göra "var result = db.query("select..");" med väntan på slutförande av arbete och efterföljande bearbetning av resultat, använder Node.js principen om asynkron exekvering, d.v.s. koden omvandlas till "db.query("select..", funktion (resultat) {resultatbearbetning});", där kontrollen omedelbart kommer att övergå till ytterligare kod, och frågeresultatet kommer att bearbetas när data anländer.

Källa: opennet.ru

Lägg en kommentar