Node.js 22.0 er blevet udgivet, en platform til kørsel af netværksapplikationer i JavaScript. Node.js 22.0 er kategoriseret som en version med langtidssupport, men denne status vil først blive tildelt i oktober, efter stabilisering. Supporten for Node.js 22.x vil fortsætte indtil den 30. april 2027. Vedligeholdelsen af den tidligere LTS-version, Node.js 20.x, vil vare indtil april 2026, og for den forrige LTS-version 18.x indtil april 2025. Vedligeholdelsen af den midlertidige version Node.js 21.x ophører den 1. juni 2024.
Hovedforbedringer:
- V8-motoren er blevet opdateret til version 12.4, brugt i Chromium 124. Af ændringer i forhold til Node.js 21-grenen, der havde V8 11.8-motoren, bemærkes:
- Support for WasmGC-udvidelsen, der forenkler portering til WebAssembly af programmer skrevet i programmeringssprog, der bruger garbage collection (Kotlin, PHP, Java osv.). WasmGC tilføjer nye typer strukturer og arrays, som kan anvende ikke-lineær hukommelsesallokering.
- Support for metoden Array.fromAsync(), som asynkront returnerer en ny instans af Array-objektet, kopieret fra array-lignende objekter, der er iterable eller asynkront iterable.
- Support for metoder til arbejde med iteratorer, såsom .map, .filter, .find, .take, .drop, .forEach og .reduce.
- Support for objektet Set, der definerer en samling værdier og tilbyder metoder for typiske operationer for mængder, såsom snit, union, forskel og komplement.
- Den optimerende JIT-kompilator Maglev er som standard aktiveret, med fokus på hurtig generering af højtydende maskinkode til aktivt brugt JavaScript-kode. Aktivering af Maglev kan betydeligt fremskynde driften af kortlivede CLI-applikationer, der ikke udfører langvarige operationer, for eksempel reduceres testtiden for Jetstream med 7,5%, mens Speedometer-testen reduceres med 5%.
- Behandlingen af strømme er blevet accelereret ved at øge værdien af indstillingen highWaterMark fra 16 KB til 65 KB (bestemmer grænsen for, hvor meget der buffermemories). Ændringen medfører en stigning i hukommelsesforbruget, så applikationer, der er designet til at arbejde med begrænset RAM, kan være nødt til at tilbageføre den gamle værdi ved at kalde setDefaultHighWaterMark().
- API-funktionaliteten for fetch() og test runner er forbedret ved at optimere oprettelsen af instanser af AbortSignal. Ydeevnen for API'er relateret til synkron interaktion med filsystemer er også øget.
- Der er tilføjet en eksperimentel mulighed for at anvende kaldet “require()” til at indlæse ESM (ECMAScript Modules) JavaScript-moduler synkront. ESM-moduler benyttes i browsere og erstatter CommonJS-modulerne, der er specifikke for Node.js. For at indlæse ESM-modulet med “require()” skal det udføres synkront (uden await på det øverste niveau). Understøttelse aktiveres med flaget “—experimental-require-module”.
- Der er tilføjet en eksperimentel mulighed for at køre scripts defineret i package.json-filen ved hjælp af kommandoen “—run ”.
- Kommandoen “node —watch” er blevet stabiliseret og giver mulighed for overvågningsdrift, der automatisk genstarter processen ved ændringer i en importeret fil (f.eks. ved at udføre “node —watch index.js” vil processen blive genstartet, når index.js ændres).
- Den indbyggede implementation af WebSocket API er stabiliseret, hvilket muliggør brug af WebSocket i klienttilstand uden at skulle installere ekstra afhængigheder.
- Partial understøttelse af API Navigator er tilføjet.
- API Webstreams har fået støtte til deflate-raw komprimeringsformatet.
- Glob og globSync funktioner til filstibestemmelse er tilføjet til node:fsmodule.
- Håndteringen af forkert konfigurerede IPv6-stakke er forbedret. En Happy Eyeballs-algoritme er implementeret for hurtigt at falde tilbage, hvis der er problemer med IPv6-forbindelser.
- API util er blevet erklæret forældet.
- Versionerne af afhængigheder er blevet opdateret: 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 3.8.0, ada 2.7.7 og undici 6.6.0.
Node.js-platformen kan bruges til både server-side drift af webapplikationer og til at skabe almindelige klient- og serverbaserede netværksprogrammer. Der er forberedt en stor samling af moduler til at udvide funktionaliteten af applikationer til Node.js, hvor man kan finde moduler med implementeringer servere og HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 klienter, moduler til integration med forskellige web-rammer, WebSocket- og Ajax-håndterere, forbindelser til DBMS (MySQL, PostgreSQL, SQLite, MongoDB), templating-motorer, CSS-motorer, implementeringer af kryptografi-algoritmer og autorisationssystemer (OAuth), XML-parsere.
For handling a large number of concurrent requests, Node.js utilizes an asynchronous code execution model based on event-driven, non-blocking I/O and the definition of callback handlers. Supported multiplexing methods include epoll, kqueue, /dev/poll, and select. The library libuv, which acts as a wrapper around libev on Unix systems and IOCP on Windows, is used for multiplexing connections. The library libeio is employed to create a thread pool for executing DNS queries in a non-blocking mode, while c-ares is integrated for this purpose. All blocking system calls are performed within the thread pool and pass their results back through an unnamed pipe, similar to signal handlers.
Udførelsen af JavaScript-kode understøttes af Googles udviklede V8-motor (Microsoft udvikler desuden en version af Node.js med Chakra-Core-motoren). I sin essens ligner Node.js frameworks som Perl AnyEvent, Ruby Event Machine, Python Twisted og eventhåndtering i Tcl, men event loop'en i Node.js er skjult for udvikleren og minder om begivenhedshåndtering i en webapplikation, der kører i en browser.
Kilde: opennet.ru
