JavaScript-plattform Node.js 22.0.0 tillgänglig

Node.js 22.0 släpptes, en plattform för att köra nätverksapplikationer i JavaScript. Node.js 22.0 klassificeras som en långsiktig supportgren, men denna status kommer att tilldelas först i oktober, efter stabilisering. Node.js 22.x kommer att stödjas fram till den 30 april 2027. Underhållet av den tidigare LTS-grenen av Node.js 20.x kommer att pågå till april 2026, och året innan, LTS-gren 18.x till april 2025. Staging-grenen av 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 ändringarna jämfört med Node.js 21-grenen, som använde V8 11.8-motorn), noteras:
    • Stöd för WasmGC-tillägget, vilket förenklar porteringen av program skrivna på programmeringsspråk som använder en sophämtare (Kotlin, PHP, Java, etc.) 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 asynkront returnerar en ny instans av ett Array-objekt kopierat från ett arrayliknande, iterbart eller asynkroniserat iterbart objekt.
    • Stöd för iteratormetoder som .map, .filter, .find, .take, .drop, .forEach och .reduce.
    • Stöd för ett uppsättningsobjekt som definierar en samling värden och erbjuder metoder som implementerar gemensamma uppsättningsoperationer, såsom korsning, förening, skillnad och addition.
  • Den Maglev-optimerande JIT-kompilatorn är aktiverad som standard, som syftar till att snabbt generera högpresterande maskinkod för mycket använd JavaScript-kod. Aktivering av Maglev kan avsevärt påskynda kortlivade CLI-applikationer som inte utför långtidsoperationer, till exempel minskar tiden för att slutföra Jetstrea-testet med 7.5 % och Speedometer-testet med 5 %.
  • Arbetet med strömmar har påskyndats genom att öka värdet på alternativet highWaterMark från 16 KB till 65 KB (definierar gränsen till vilken inspelningen buffras). Ändringen resulterar i ökad minnesförbrukning, så applikationer som är designade för att köras på begränsat RAM-minne kan behöva återgå till det gamla värdet via ett anrop till setDefaultHighWaterMark().
  • Förbättrad prestanda för fetch() och testlöpare API:er genom att göra AbortSignal-instansieringen mer effektiv. Prestandan för API:er relaterade till synkront arbete med filsystem har förbättrats.
  • En experimentell funktion har tillhandahållits för att använda "require()"-anropet för att ladda JavaScript ESM-moduler (ECMAScript-moduler) i synkront läge. ESM-moduler används i webbläsare och ersätter CommonJS-moduler specifika för Node.js. För att ladda via "require()" måste ESM-modulen exekveras i synkront läge (utan att vänta på toppnivån). Support aktiveras via flaggan "--experimental-require-module".
  • Lade till experimentell förmåga att köra skript definierade i filen package.json med kommandot "--run" "
  • Kommandot "node -watch" har flyttats till den stabila kategorin med implementering av ett bevakningsläge som säkerställer att processen startas om när den importerade filen ändras (till exempel om "node -watch index.js" körs, processen kommer att startas om automatiskt när index.js ändras).
  • Den inbyggda implementeringen av WebSocket API har stabiliserats, vilket gör att WebSocket kan användas i klientläge utan att installera ytterligare beroenden.
  • Lade till partiellt stöd för Navigator API.
  • Webstreams API har lagt till stöd för deflate-raw-komprimeringsformatet.
  • Lade till glob- och globSync-funktioner till node:fsmodule för mönstermatchning av filsökvägar.
  • Förbättrad hantering av felaktigt konfigurerade IPv6-stackar. Implementerad Happy Eyeballs-algoritm för snabb återställning vid problem med IPv6-drift.
  • util API har fasats ut.
  • Uppdaterade beroendeversioner: 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. .

Node.js-plattformen kan användas både för serversidesstöd för webbapplikationer och för att skapa standardiserade nätverksprogram på klient- och serversidan. För att utöka funktionaliteten hos Node.js-applikationer har en stor samling moduler förberetts, inklusive de som implementerar servrar och klienter för HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduler för integration med olika webbramverk, WebSocket- och Ajax-hanterare, kopplingar till DBMS (MySQL, PostgreSQL, SQLite, MongoDB), mallmotorer, CSS-motorer, implementeringar av kryptografiska algoritmer och auktoriseringssystem (OAuth), XML-parsers.

För att hantera ett stort antal parallella förfrågningar använder Node.js en asynkron kodexekveringsmodell baserad på icke-blockerande händelsebearbetning och definierande av återuppringningshanterare. Metoder som stöds för multiplexering av anslutningar inkluderar epoll, kqueue, /dev/poll och select. För anslutningsmultiplexering används libuv-biblioteket, som är ett tillägg till libev på Unix-system och till 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 ett icke-blockerande läge. Alla systemanrop som orsakar blockering exekveras inom trådpoolen och skickar sedan, som signalhanterare, resultatet av sitt arbete tillbaka genom ett namnlöst rör.

Exekvering av JavaScript-kod säkerställs genom att använda 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 ramverk och implementeringen av händelser i Tcl, men händelseloopen i Node.js är dold för utvecklaren och liknar händelsebearbetning i en webbapplikation körs i webbläsaren.

Källa: opennet.ru

Lägg en kommentar