Den serverbaserade JavaScript-plattformen Node.js 20.0 är tillgänglig

Node.js 20.0 har släppts, en plattform för körning av nätverksapplikationer skriven i JavaScript. Node.js 20.0 tillhör de grenar som har långsiktig support, men denna status kommer först att beviljas i oktober, efter stabilisering. Stödet för Node.js 20.x kommer att pågå fram till den 30 april 2026. Långsiktig support för den tidigare LTS-grenen Node.js 18.x kommer att pågå till april 2025, och för den före det, LTS-grenen 16.x, till september 2023. Stödet för LTS-grenen 14.x kommer att avslutas den 30 april och för den mellanliggande grenen Node.js 19.x den 1 juni.

Huvudsakliga förbättringar:

  • V8-motorn har uppdaterats till version 11.3, som används i Chromium 113. Bland förändringarna jämfört med grenen Node.js 19, som använde Chromium 107, märks funktionerna String.prototype.isWellFormed och toWellFormed, metoderna Array.prototype och TypedArray.prototype för att arbeta med kopior vid ändring av Array- och TypedArray-objekt, flaggan "v" i RegExp, stöd för att ändra storlek på ArrayBuffer och öka storleken på SharedArrayBuffer, samt tail-call recursion i WebAssembly.
  • Предложен экспериментальный механизм Permission Model, позволяющий ограничить доступ к определённым ресурсам в процессе исполнения. Поддержка Permission Model включается через указание при запуске флага «—experimental-permission». В начальной реализации предложены опции для ограничения доступа на запись (—allow-fs-write) и чтение (—allow-fs-read) к определённым частям ФС, дочерним процессам (—allow-child-process), дополнениям (—no-addons) и потокам (—allow-worker). Например, чтобы разрешить запись в каталог /tmp и чтение файла /home/index.js можно указать: node —experimental-permission —allow-fs-write=/tmp/ —allow-fs-read=/home/index.js index.js

    För att kontrollera åtkomst rekommenderas metoden process.permission.has(), exempelvis "process.permission.has('fs.write', '/tmp/test')".

  • Hantera externa ECMAScript-moduler (ESM) som laddas via alternativet "—experimental-loader" körs nu i en separat tråd, isolerad från huvudtråden, vilket eliminerar kollisioner mellan applikationskod och laddade ESM-moduler. På liknande sätt som i webbläsare körs metoden import.meta.resolve() nu i synkront läge när den kallas från applikationen. I en av de kommande grenar av Node.js planeras stöd för att ladda ESM att bli en stabil funktion.
  • Modulen node:test (test_runner), avsedd för att skapa och köra tester i JavaScript som returnerar resultat i TAP-format (Test Anything Protocol), har nu blivit stabil.
  • Ett särskilt team av utvecklare har bildats för att optimera prestanda, vilket har arbetat med att påskynda olika runtime-komponenter, inklusive URL-parsing, fetch() och EventTarget, när den nya grenen förbereds. Till exempel har overheaden vid initialisering av EventTarget halverats, prestandan för metoden URL.canParse() har ökat avsevärt och effektiviteten hos timers har förbättrats. Dessutom har en högpresterande URL-parser, Ada 2.0, skriven i C++, inkluderats.
  • Utvecklingen av den experimentella funktionen för distribution av applikationer i form av en enda körbar fil (SEA, Single Executable Applications) har fortsatt. Skapandet av den körbara filen kräver nu en inlagd blob, som genereras på grundval av en konfigurationsfil i JSON-format (istället för att använda en JavaScript-fil).
  • API Web Crypto-kompatibiliteten med implementationer från andra projekt har förbättrats.
  • Officiellt stöd för Windows på ARM64-system har lagts till.
  • Implementeringen av stöd för WASI-tillägg (WebAssembly System Interface) för att skapa isolerade WebAssembly-applikationer har fortsatt. Kravet på att ange ett särskilt kommandoradsflagg för att aktivera WASI-stöd har tagits bort.

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

Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar 🔥 Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster