Node.js 23.0.0 har slÀppts, en plattform för att köra nÀtverksapplikationer skrivna i JavaScript. Node.js 23.0 tillhör de interimistiska versionerna som fÄr stöd i 7 mÄnader (till juni 2025). Inom kort kommer stabiliseringen av Node.js 22 att avslutas, vilket den 29 oktober fÄr LTS-status och kommer att stödjas fram till april 2027. Stödet för tidigare LTS-versioner Node.js 20.x och 18.x kommer att pÄgÄ till april 2026 respektive 2025.
Huvudsakliga förbÀttringar:
- Experimentellt stöd för TypeScript, som tillĂ„ter explicit typdefinition, har lagts till. Stödet aktiveras med hjĂ€lp av alternativen "âexperimental-strip-types" och "âexperimental-transform-types". Med det första alternativet handlar det om att ta bort typdefinitioner specifika för sprĂ„ket (typkontroll utförs inte, koden konverteras helt enkelt till JavaScript utan typer). Det andra alternativet konverterar vissa element av TypeScript-syntax, som enum och namespace, till JavaScript-kod.
- Möjligheten att anvÀnda anropet "require()" för att ladda JavaScript-moduler ESM (ECMAScript Modules) i synkront lÀge Àr som standard aktiverad. ESM-moduler anvÀnds i webblÀsare och ersÀtter CommonJS-moduler, som Àr specifika för Node.js. För att ladda en ESM-modul via "require()" i Node.js mÄste den utföras i synkront lÀge (utan await pÄ den högsta nivÄn).
- Automatisk detektering av ESM-moduler i filer utan filÀndelse eller med Àndelsen ".js" har sÀkerstÀllts. Tidigare betraktades sÄdana filer som CommonJS-moduler om deras typ inte angavs i den samexisterande package.json-filen ("type": "module"). I den nya versionen görs först ett försök att ladda dem som CommonJS-moduler, och om det misslyckas, som ESM-moduler.
- Experimentell implementering har lagts till kompatibel med webblĂ€sare API:et Web Storage, avsett för permanent (klass localStorage) eller tillfĂ€llig (klass sessionStorage) lagring av data i formatet nyckel/vĂ€rde. För att aktivera stöd för Web Storage krĂ€vs att man kör med flaggan "âexperimental-webstorage" och anger sökvĂ€gen till filen med lagring via flaggan "âlocalstorage-file".
- En experimentell SQLite API har lagts till för att arbeta med databaser med hjÀlp av SQL-frÄgesprÄket och lagring baserat pÄ SQLite-biblioteket. Förutom att lagra databasen i en fil pÄ disken kan den ocksÄ placeras i minnet genom att specificera ":memory:" istÀllet för filnamnet. Den ovan nÀmnda Web Storage API har ocksÄ implementerats ovanpÄ SQLite, vilket har lett till att SQLite har lagts till bland beroenden i Node.js.
- Kommandot "node --run" har officiellt meddelats stabilt, avsett för att köra skript som definieras i package.json-filen.
- Valfri stöd för caching av kompilering pÄ disken har implementerats för att avsevÀrt snabba upp modulers start. Caching aktiveras med miljövariabeln NODE_COMPILE_CACHE. Denna funktion liknar paketet v8-compile-cache, men erbjuder högre prestanda och stöd för ESM-moduler.
- Ett optimering av Buffer-objektet har genomförts, vilket avsevÀrt har ökat prestandan hos metoderna Buffer.copy() och Buffer.write().
- Prestandan hos node:fs-modulen har ökat, och antalet anrop av C++-kod under drift har minskats.
- V8-motorn har uppdaterats till version 12.9, som anvÀnds i Chromium 129.
- Stödet för 32-bitars system med Windows har tagits bort.
- PÄ grund av införandet av funktioner definierade i C++20-standarden i Node.js och V8-motorn har kraven pÄ GCC-kompilatorversionen höjts. För att bygga Node.js krÀvs nu minst GCC version 12.
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
