Node.js 18.0 har slÀppts, en plattform för att köra nÀtverksapplikationer skrivna i JavaScript. Node.js 18.0 Àr för nÀrvarande i en lÄngsiktig supportgren, men den statusen kommer att beviljas först i oktober efter stabilisering. Stödet för Node.js 18.x kommer att pÄgÄ till april 2025. UnderhÄllet av den tidigare LTS-grenen Node.js 16.x kommer att fortsÀtta till april 2024, och den föregÄende LTS-grenen 14.x fram till april 2023. UnderhÄllet för LTS-grenen 12.x avbryts den 30 april, och den mellanliggande grenen Node.js 17.x 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 Node.js 17.9.0-versionen har stöd för funktioner som metoderna findLast och findLastIndex lagts till, vilket möjliggör sökning av element frÄn slutet av en array, samt funktionen Intl.supportedValuesOf. API:t Intl.Locale har förbÀttrats. Initieringen av klassfÀlt och privata metoder har pÄskyndats.
- Den experimentella API:n fetch() har aktiverats som standard, avsedd för att hÀmta resurser över nÀtet. Implementeringen baseras pÄ koden frÄn HTTP/1.1-klienten undici och ligger sÄ nÀra motsvarande API i webblÀsare som möjligt. Stöd för grÀnssnitten FormData, Headers, Request och Response för manipulation av HTTP-rubriker för förfrÄgningar och svar har ocksÄ sÀkerstÀllts. 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 API:t Web Streams har lagts till, vilket ger tillgÄng till datastreams som tas emot över nÀtet. API:t möjliggör att lÀgga till egna hanterare för att arbeta med data nÀr informationen anlÀnder över nÀtet, utan att behöva vÀnta pÄ att hela filen ska laddas. I Node.js finns nu sÄdana objekt som ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream och DecompressionStream.
- API:t Blob, som gör det möjligt att inkapsla oförÀnderliga rÄdata för sÀker anvÀndning i olika arbetstrÄdar, har nu stabiliserats.
- API:t BroadcastChannel, som möjliggör asynkron meddelandeutbyte i formatet 'en avsÀndare - mÄnga mottagare', har nu stabiliserats.
- Den experimentella modulen node:test har lagts till för att skapa och köra tester i JavaScript, som returnerar resultat i TAP-format (Test Anything Protocol).
- FÀrdiga byggnader för Red Hat Enterprise Linux (RHEL) 8 och andra distributioner baserade pÄ Glibc 2.28+ har skapats, inklusive Debian 10 och Ubuntu 20.04, samt för macOS 10.15+. PÄ grund av problem med byggandet av V8-motorn har skapandet av 32-bitarsbyggnader för Windows tillfÀlligt stoppats.
- En experimentell möjlighet att bygga en körbar Node.js-fil med anvĂ€ndarvalda komponenter, som initieras vid start, har tillhandahĂ„llits. För att definiera startkomponenter har alternativet "ânode-snapshot-main" lagts till i byggskriften configure, till exempel "./configure ânode-snapshot-main=marked.js; name node".
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
