De release van Node.js 22.0 heeft plaatsgevonden, een platform voor het uitvoeren van netwerkapplicaties in de programmeertaal JavaScript. Node.js 22.0 valt onder de lange-termijnondersteuning, maar deze status wordt pas in oktober toegekend, na stabilisatie. Ondersteuning voor Node.js 22.x zal doorgaan tot 30 april 2027. De ondersteuning van de vorige LTS-tak Node.js 20.x zal doorgaan tot april 2026, en van de vorige LTS-tak 18.x tot april 2025. De ondersteuning voor de tussenliggende tak Node.js 21.x wordt beƫindigd op 1 juni 2024.
Hoofdverbeteringen:
- De V8-engine is bijgewerkt naar versie 12.4, zoals toegepast in Chromium 124. De wijzigingen ten opzichte van de tak Node.js 21, waarin de V8-engine 11.8 werd gebruikt, zijn:
- Ondersteuning voor de WasmGC-extensie, die het porteren naar WebAssembly vergemakkelijkt van programma's geschreven in programmeertalen die gebruikmaken van garbage collection (zoals Kotlin, PHP, Java, enz.). WasmGC voegt nieuwe soorten structuren en arrays toe waarvoor niet-lineaire geheugentoewijzing kan worden toegepast.
- Ondersteuning voor de methode Array.fromAsync(), die in asynchrone modus een nieuw exemplaar van het Array-object retourneert, gekopieerd uit array-achtige objecten, die iterabel of asynchroon iterabel zijn.
- Ondersteuning voor methoden voor het werken met iterators, zoals .map, .filter, .find, .take, .drop, .forEach en .reduce.
- Ondersteuning voor het object Set, dat een verzameling waarden definieert en methoden biedt voor typische operaties met verzamelingen, zoals doorsneden, verenigingen, verschillen en aanvullingen.
- De optimaliserende JIT-compiler Maglev is standaard ingeschakeld, gericht op het snel genereren van hoogpresterende machinecode voor actief gebruikte JavaScript-code. Het inschakelen van Maglev maakt een aanzienlijke versnelling mogelijk van kortlevende CLI-applicaties die geen langdurige bewerkingen uitvoeren; bijvoorbeeld wordt de tijd voor het uitvoeren van de Jetstream-test met 7,5% verminderd en voor de Speedometer-test met 5%.
- De verwerkingssnelheid van streams is versneld door de waarde van de optie highWaterMark te verhogen van 16 KB naar 65 KB (bepaalt de limiet tot waar het schrijven wordt gebufferd). Deze wijziging leidt tot een verhoogd geheugengebruik, dus applicaties die zijn ontworpen voor een beperkte hoeveelheid RAM moeten mogelijk de oude waarde herstellen met een aanroep van setDefaultHighWaterMark().
- De prestaties van de API fetch() en de test runner zijn verbeterd door de efficiƫntie van het maken van instanties van AbortSignal te verhogen. De prestaties van de API's met betrekking tot synchrone interactie met besturingssystemen zijn ook verbeterd.
- Er is een experimentele mogelijkheid toegevoegd om de aanroep 'require()' te gebruiken voor het synchroniseren van het laden van JavaScript-modules ESM (ECMAScript Modules). ESM-modules worden in browsers gebruikt en vervangen de CommonJS-modules die specifiek zijn voor Node.js. Om een ESM-module via 'require()' te laden, moet deze in synchronisatiemodus worden uitgevoerd (zonder await op het hoogste niveau). Ondersteuning wordt ingeschakeld via de vlag '--experimental-require-module'.
- Er is een experimentele mogelijkheid toegevoegd om scripts te starten die zijn gedefinieerd in het bestand package.json met behulp van het commando '--run '.
- De 'node --watch' opdracht is overgebracht naar de stabiele categorie met de implementatie van de observatiemodus, die de herstart van het proces bij wijzigingen in het geĆÆmporteerde bestand mogelijk maakt (bijvoorbeeld, bij gebruik van 'node --watch index.js' zal het proces automatisch opnieuw worden gestart zodra index.js verandert).
- De ingebouwde implementatie van de WebSocket API is gestabiliseerd, waardoor WebSocket in de clientmodus kan worden gebruikt zonder extra afhankelijkheden te installeren.
- De gedeeltelijke ondersteuning van de Navigator API is toegevoegd.
- Ondersteuning voor het deflate-raw compressieformaat is toegevoegd aan de Webstreams API.
- Functies glob en globSync zijn toegevoegd aan de module node:fsmodule voor het overeenkomen van bestandsroutes op basis van een patroon.
- De verwerking van verkeerd geconfigureerde IPv6-stacks is verbeterd. Het Happy Eyeballs-algoritme is geĆÆmplementeerd voor een snelle fallback in geval van problemen met IPv6.
- De util API is als verouderd verklaard.
- De versies van de afhankelijkheden zijn bijgewerkt: 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 en undici 6.6.0.
Het Node.js-platform kan worden gebruikt voor zowel serverondersteuning van webapplicaties als voor het creƫren van reguliere client- en servernetwerkprogramma's. Voor de uitbreiding van de functionaliteit van toepassingen voor Node.js is er een grote collectie modules beschikbaar, waar je modules kunt vinden met implementatie van servers en clients voor HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, modules voor integratie met verschillende webframeworks, WebSocket en Ajax handlers, connectoren naar databases (MySQL, PostgreSQL, SQLite, MongoDB), template-engines, CSS-engines, implementaties van cryptografie en autorisatiesystemen (OAuth), XML-parsers.
Om een groot aantal gelijktijdige verzoeken te verwerken, gebruikt Node.js een asynchroon model voor het uitvoeren van code, gebaseerd op een event-driven benadering in niet-blokkerende modus en het definiëren van callback-handlers. Methoden zoals epoll, kqueue, /dev/poll en select worden ondersteund als manieren om verbindingen te multiplexen. Voor het multiplexen van verbindingen wordt de libuv-bibliotheek gebruikt, die is opgebouwd bovenop libev in Unix-systemen en IOCP in Windows. Voor het creëren van een threadpool wordt de libeio-bibliotheek gebruikt, en voor het uitvoeren van DNS-verzoeken in niet-blokkerende modus is c-ares geïntegreerd. Alle systeemaanroepen die blokkeren, worden binnen de threadpool uitgevoerd en geven, net als signaalhandlers, het resultaat van hun werk terug via een niet-genaamd kanaal (pipe).
De uitvoering van JavaScript-code wordt mogelijk gemaakt door de V8-engine die is ontwikkeld door Google (bovendien ontwikkelt Microsoft een versie van Node.js met de Chakra-Core-engine). In wezen lijkt Node.js op de frameworks Perl AnyEvent, Ruby Event Machine, Python Twisted en de evenementenimplementatie in Tcl, maar de event loop in Node.js is verborgen voor de ontwikkelaar en lijkt op de gebeurtenisverwerking in een webapplicatie die in een browser draait.
Bron: opennet.ru
