Node.js 22.0 har slÀppts, en plattform för att köra nÀtverksapplikationer skrivna i JavaScript. Node.js 22.0 har klassificerats som en lÄngsiktig stödversion, men denna status kommer att tilldelas först i oktober efter stabilisering. Stödet för Node.js 22.x kommer att vara fram till den 30 april 2027. UnderhÄllet av den tidigare LTS-versionen Node.js 20.x kommer att fortsÀtta fram till april 2026, och den före detta LTS-versionen 18.x fram till april 2025. UnderhÄllet av den mellanliggande versionen Node.js 21.x kommer att upphöra den 1 juni 2024.
Huvudsakliga förbÀttringar:
- V8-motorn har uppdaterats till version 12.4, som anvÀnds i Chromium 124. Bland förÀndringarna jÀmfört med versionen Node.js 21, som anvÀnde V8-motorn 11.8, mÀrks:
- Stöd för WasmGC-tillÀgget, som underlÀttar porteringen av program skrivna pÄ programmeringssprÄk som anvÀnder skrÀpsamling (Kotlin, PHP, Java m.fl.) till WebAssembly. WasmGC lÀgger till nya typer av strukturer och arrayer som kan anvÀnda icke-linjÀr minnesallokering.
- Stöd för metoden Array.fromAsync(), som i asynkront lÀge returnerar en ny instans av objektet Array, kopierad frÄn array-liknande objekt som Àr upprÀkningsbara (iterable) eller asynkront upprÀkningsbara (async iterable).
- Stöd för metoder för att arbeta med iteratorer, sÄsom .map, .filter, .find, .take, .drop, .forEach och .reduce.
- Stöd för objektet Set, som definierar en samling vÀrden och erbjuder metoder för att utföra typiska operationer pÄ mÀngder, sÄsom snitt, union, Differens och komplement.
- Den optimerande JIT-kompilatorn Maglev Àr aktiverad som standard, med fokus pÄ att snabbt generera högpresterande maskinkod för aktivt anvÀnd JavaScript-kod. Aktiveringen av Maglev kan avsevÀrt snabba upp kortlivade CLI-applikationer som inte utför lÄngvariga operationer, till exempel minskar testtiden för Jetstream med 7,5 % och för Speedometer med 5 %.
- Arbetet med strömmar har snabba upp genom att öka vÀrdet pÄ alternativet highWaterMark frÄn 16 KB till 65 KB (definierar grÀnsen för hur mycket som buffras för skrivning). Denna förÀndring resulterar i ökad minnesanvÀndning, sÄ applikationer som Àr avsedda att arbeta med begrÀnsad RAM kan behöva ÄtergÄ till det gamla vÀrdet genom att anropa setDefaultHighWaterMark().
- Prestanda för API fetch() och testlöpare har förbÀttrats genom ökad effektivitet vid skapande av instanser av AbortSignal. Prestandan för API:er kopplade till synkron arbete med filsystem har ocksÄ förbÀttrats.
- En experimentell funktion har lagts till för att anvÀnda anropet "require()" för att ladda JavaScript-moduler ESM (ECMAScript Modules) i synkront lÀge. ESM-moduler anvÀnds i webblÀsare och ersÀtter CommonJS-moduler som Àr specifika för Node.js. För att ladda ESM-modulen via "require()" mÄste den köras i synkront lÀge (utan await pÄ hög nivÄ). Stödet aktiveras med flaggan "--experimental-require-module".
- En experimentell funktion har lagts till för att köra skript definierade i package.json-filen med kommandot "--run ".
- Kommandot "node --watch" har övergÄtt till stabil kategori med implementation av övervakningslÀge, som sÀkerstÀller att processen startas om vid Àndring av den importerade filen (till exempel, om "node --watch index.js" körs, kommer processen automatiskt att startas om nÀr index.js Àndras).
- Den inbyggda implementationen av WebSocket API har stabiliserats, vilket gör det möjligt att anvÀnda WebSocket i klientlÀge utan att installera ytterligare beroenden.
- Delvis stöd för Navigator API har lagts till.
- Stöd för deflate-raw komprimeringsformatet har lagts till i Webstreams API.
- Funktionerna glob och globSync har lagts till i modulen node:fsmodule för att matcha filvÀgar med mönster.
- Hanteringen av felaktigt konfigurerade IPv6-staplar har förbÀttrats. Algoritmen Happy Eyeballs har implementerats för snabb ÄtergÄng vid problem med IPv6.
- API util har deklarerats som förÄldrat.
- Versionerna av beroenden har uppdaterats: npm 10.5.1, libuv 1.48.0, simdutf 5.2.3, c-ares 1.28.1, zlib 1.3.0.1-motley-24c07df, simdjson till 3.8.0, ada 2.7.7 och undici 6.6.0.
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 en asynkron kodexekveringsmodell baserad pÄ hÀndelsehantering i icke-blockerande lÀge och definiering av callback-hanterare. För flerfaldig koppling stöds metoder som epoll, kqueue, /dev/poll och select. Biblioteket libuv anvÀnds för att multiplexera kopplingar, vilket Àr en överbyggnad ovanpÄ libev i Unix-system och 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 genomförs inuti trÄdpoolen och överför sedan, liksom signalhanterare, resultatet av sitt arbete tillbaka genom en namnlös kanal (pipe).
Utförandet av JavaScript-kod sÀkerstÀlls genom anvÀndning av V8-motorn utvecklad av Google (dessutom utvecklar Microsoft en variant av Node.js med Chakra-Core-motorn). I sin kÀrna liknar Node.js ramverken Perl AnyEvent, Ruby Event Machine, Python Twisted och hÀndelseimplementeringen i Tcl, men hÀndelsebehandlingsloopen i Node.js Àr dold för utvecklaren och pÄminner om hÀndelsehantering i en webapplikation som körs i en webblÀsare.
KĂ€lla: opennet.ru
