Node.js 21.0 har slÀppts, en plattform för att köra nÀtverksapplikationer skrivna i JavaScript. Stödet för Node.js 21.0 kommer att pÄgÄ i 6 mÄnader. Inom de nÀrmaste dagarna kommer stabiliseringen av Node.js 20 att slutföras, vilket fÄr LTS-status och kommer att stödjas till april 2026. UnderhÄllet av den tidigare LTS-versionen Node.js 18.0 kommer att pÄgÄ till september 2025, och den föregÄende LTS-versionen 16.0 kommer att stödjas till april 2024.
Huvudsakliga förbÀttringar:
- Det stabila API:t Fetch har tillkÀnnagivits, avsett för att hÀmta resurser över nÀtverket och förenkla skrivandet av universell JavaScript-kod som fungerar bÄde pÄ server- och klientsidan. Implementeringen Àr baserad pÄ koden frÄn HTTP/1.1-klienten undici och Àr nÀra kopplad till det liknande API som tillhandahÄlls i webblÀsare. API:t inkluderar metoden fetch() och objekten Headers, Request och Response, som representerar HTTP-rubriker, förfrÄgningar och svar. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
- Stödet för API:t WebStreams har stabiliserats, vilket ger Ätkomst till datastreams som hÀmtas över nÀtet. API:t möjliggör att lÀgga till egna hanterare som arbetar med data allt eftersom informationen anlÀnder över nÀtverket, utan att vÀnta pÄ att hela filen ska laddas. I Node.js finns objekt som ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream och DecompressionStream.
- En experimentell implementation av WebSocket-klienten har lagts till, kompatibel med webblĂ€sare.. För att aktivera stödet för WebSocket finns flaggan "âexperimental-websocket".
- En experimentell standardlĂ€ge för anvĂ€ndningen av JavaScript-moduler ESM (ECMAScript Modules, anvĂ€nder i moduler för webblĂ€sare) istĂ€llet för CommonJS (specifik för Node.js) har lagts till. Ăndringen pĂ„verkar inte moduler vars format tydligt definieras via fĂ€ltet "type" i package.json, specificerat genom flaggan "âinput-type" eller uppenbart pĂ„ grund av filĂ€ndelsen (.mjs för ESM, .cjs för CommonJS). Moduler som inte uttryckligen definieras som CommonJS (till exempel har filĂ€ndelsen ".js") kommer, nĂ€r det nya lĂ€get aktiveras, att uppfattas som ESM-moduler. För att aktivera de nya modulinstĂ€llningarna föreslĂ„s flaggan "âexperimental-default-type".
- V8-motorn har uppdaterats till version 11.8, som anvÀnds i Chromium 118, dÀr stödet för metoden ArrayBuffer.prototype.transfer, möjligheten att gruppera arrayer (metoden groupBy) och WebAssembly-instruktioner för bearbetning av konstanter (i32.add, i32.sub, i32.mul, i64.add, i64.sub och i64.mul) har införts.
- Stödet för globalPreload-hanteraren har upphört. IstÀllet bör du anvÀnda anropen register och initialize för att konfigurera moduler.
- Funktionen fs.writeFile har fÄtt alternativet "flush" för att tvinga skrivning av data till lagringen efter varje skrivoperation.
- Prestandan för koden kopplad till URL-parsing, API-fetch, strömmar, node:fs och HTTP har förbÀttrats.
- En global navigator-objekt har lagts till. Till exempel kan du anvÀnda navigator.hardwareConcurrency för att fÄ information om antalet CPU-kÀrnor.
- Parametern "âtest" har fĂ„tt stöd för globmönster för att vĂ€lja vilka tester som ska köras (till exempel kan du ange "âtest **/*.test.js").
- Paketmanagern npm 10.2.0 och parsern llhttp 9.1.2 har uppdaterats.
- Stödet för Visual Studio 2019 och macOS-versioner Àldre Àn 11.0 har upphört.
Node.js-plattformen kan anvÀndas bÄde för serverhantering av webapplikationer och för att skapa vanliga klient- och servernÀtverksprogram. För att utöka funktionaliteten för Node.js-applikationer har en stor samling moduler tagits fram, dÀr man kan finna moduler med implementeringar. servrar och kunder för HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduler för integration med olika webbramverk, WebSocket- och Ajax-hanterare, anslutare till databaser (MySQL, PostgreSQL, SQLite, MongoDB), mallmotorer, CSS-motorer, implementationer av kryptalgoritmer och auktorisationssystem (OAuth), XML-parserare.
För att hantera ett stort antal parallella förfrÄgningar anvÀnder Node.js ett asynkront kodkörningssystem baserat pÄ hÀndelsehantering i icke-blockerande lÀge och definierar callback-hanterare. Metoder som epoll, kqueue, /dev/poll och select stöds för multiplexeringsanslutningar. För multiplexeringsanslutningar anvÀnds biblioteket libuv, som Àr ett lager över libev i Unix-system och över IOCP i Windows. För att skapa en trÄdpool anvÀnds biblioteket libeio, och för att utföra DNS-förfrÄgningar i icke-blockerande lÀge integreras c-ares. Alla systemanrop som orsakar blockering utförs inom trÄdpoolen och skickar sedan, liksom signalhanterare, tillbaka resultatet av sitt arbete genom en anonym kanal (pipe). Utförandet av JavaScript-kod sÀkerstÀlls genom att anvÀnda den av Google utvecklade V8-motorn (dessutom utvecklar Microsoft en variant av Node.js med Chakra-Core-motorn).
I grunden liknar Node.js Perl AnyEvent, Ruby Event Machine, Python Twisted och hÀndelsehantering i Tcl, men hÀndelsecykeln (event loop) i Node.js Àr gömd för utvecklaren och pÄminner om hÀndelsehantering i en webbapplikation som körs i webblÀsaren. Vid utveckling av applikationer för Node.js Àr det viktigt att ta hÀnsyn till den hÀndelseorienterade programmeringsspecifikationen. IstÀllet för att köra "var result = db.query('select..');" och vÀnta pÄ att operationen ska slutföras innan jag behandlar resultaten, anvÀnds i Node.js principen för asynkron bearbetning. Det vill sÀga koden omformas till "db.query('select..', function (result) {resultathantering});", dÀr kontrollen omedelbart gÄr vidare till nÀsta kod medan resultaten kommer att bearbetas efter hand.
KĂ€lla: opennet.ru
