Server-side JavaScript-plattform Node.js 20.0 är tillgänglig

Utgivningen av Node.js 20.0, en plattform för att köra nätverksapplikationer i JavaScript, har ägt rum. Node.js 20.0 har tilldelats den långa supportgrenen, men denna status kommer inte att tilldelas förrän i oktober, efter stabilisering. Node.js 20.x kommer att stödjas fram till den 30 april 2026. Underhållet av den tidigare Node.js 18.x LTS-grenen kommer att pågå till april 2025, och den tidigare 16.x LTS-grenen till september 2023. 14.x LTS-filialen kommer att underhållas den 30 april och Node.js 19.x interimsfilial den 1 juni.

Huvudsakliga förbättringar:

  • V8-motorn har uppdaterats till version 11.3, som används i Chromium 113. Av ändringarna jämfört med Node.js 19-grenen, som använde Chromium 107-motorn, funktionerna String.prototype.isWellFormed och toWellFormed, Array.prototype och TypedArray.prototype-metoder för att arbeta med kopiering vid ändring av Array- och TypedArray-objekt, "v"-flagga i RegExp, stöd för att ändra storlek på ArrayBuffer och öka storleken på SharedArrayBuffer, tail-call i WebAssembly.
  • En experimentell Permission Model-mekanism föreslås som låter dig begränsa åtkomst till vissa resurser under körning. Behörighetsmodellstöd aktiveras genom att ange flaggan "--experimentell-behörighet" när den körs. I den initiala implementeringen föreslogs alternativ för att begränsa skriv- (--allow-fs-write) och läs- (--allow-fs-read) åtkomst till vissa delar av FS, underordnade processer (--allow-child-process) , tillägg (--no-addons ) och trådar (--allow-worker). Till exempel, för att tillåta skrivning till /tmp-katalogen och läsning av filen /home/index.js, kan du ange: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js index .js

    För att kontrollera åtkomst, föreslås det att du använder metoden process.permission.has(), till exempel "process.permission.has('fs.write',"/tmp/test").

  • Hanterare för externa ECMAScript-moduler (ESM) som laddas via alternativet "--experimental-loader" exekveras nu i en separat tråd, isolerad från huvudtråden, vilket eliminerar skärningspunkten mellan applikationskod och laddade ESM-moduler. I likhet med webbläsare körs import.meta.resolve()-metoden nu synkront när den anropas från ett program. I en av de nästa grenarna av Node.js planeras ESM-laddningsstöd att flyttas till kategorin stabila funktioner.
  • Modulen node:test (test_runner), utformad för att skapa och köra JavaScript-tester som returnerar resultat i TAP-format (Test Anything Protocol), har flyttats till stabil.
  • Ett separat prestationsteam har bildats, som inför den nya grenen har arbetat med att snabba upp olika runtime-komponenter, inklusive URL-parsing, fetch() och EventTarget. Till exempel har omkostnaderna för att initiera EventTarget halverats, prestandan för metoden URL.canParse() har förbättrats avsevärt och effektiviteten hos timers har förbättrats. Dessutom ingår utgivningen av en högpresterande URL-parser - Ada 2.0, skriven i C ++, i kompositionen.
  • Utvecklingen av en experimentell funktion för att leverera applikationer i form av en enda körbar fil (SEA, Single Executable Applications) har fortsatt. Att skapa en körbar nu kräver att en blob som genererats från en JSON-konfigurationsfil ersätts (istället för att ersätta en JavaScript-fil).
  • Förbättrad Web Crypto API-kompatibilitet med implementeringar från andra projekt.
  • Lade till officiellt stöd för Windows på ARM64-system.
  • Fortsatt stöd för WASI-tillägg (WebAssembly System Interface) för att skapa fristående WebAssembly-applikationer. Tog bort behovet av att ange en speciell kommandoradsflagga för att aktivera WASI-stöd.

Node.js-plattformen kan användas både för serverunderhåll av webbapplikationer och för att skapa vanliga klient- och servernätverksprogram. För att utöka funktionaliteten av applikationer för Node.js har en stor samling av moduler utarbetats, där du kan hitta moduler med implementering av HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3-servrar och klienter, moduler för integration med olika webbramverk, WebSocket- och Ajax-hanterare, DBMS-anslutningar (MySQL, PostgreSQL, SQLite, MongoDB), mallmotorer, CSS-motorer, implementeringar av kryptoalgoritmer och auktoriseringssystem (OAuth), XML-parsers.

För att säkerställa bearbetningen av ett stort antal parallella förfrågningar använder Node.js en asynkron kodexekveringsmodell baserad på icke-blockerande händelsehantering och definitionen av callback-hanterare. Metoder som stöds för multiplexering av anslutningar är epoll, kqueue, /dev/poll och select. För anslutningsmultiplexering används libuv-biblioteket, som är ett tillägg för libev på Unix-system och IOCP på Windows. Libeio-biblioteket används för att skapa en trådpool, och c-ares är integrerad för att utföra DNS-frågor i icke-blockerande läge. Alla systemanrop som orsakar blockering exekveras inne i trådpoolen och överför sedan, liksom signalhanterare, resultatet av sitt arbete tillbaka genom ett namnlöst rör (pipe). Exekveringen av JavaScript-kod tillhandahålls genom användningen av V8-motorn som utvecklats av Google (dessutom utvecklar Microsoft en version av Node.js med Chakra-Core-motorn).

I sin kärna liknar Node.js Perl AnyEvent, Ruby Event Machine, Python Twisted och implementeringen av Tcl-händelser, men händelseslingan i Node.js är dold för utvecklaren och liknar händelsehantering i en webbapplikation som körs i webbläsaren. När du skriver applikationer för node.js måste du ta hänsyn till detaljerna för händelsestyrd programmering, till exempel istället för att göra "var result = db.query("select..");" med väntan på slutförande av arbete och efterföljande bearbetning av resultat, använder Node.js principen om asynkron exekvering, d.v.s. koden omvandlas till "db.query("select..", funktion (resultat) {resultatbearbetning});", där kontrollen omedelbart kommer att övergå till ytterligare kod, och frågeresultatet kommer att bearbetas när data anländer.

Källa: opennet.ru

Lägg en kommentar