JavaScript-platform Node.js 22.0.0 beschikbaar

Node.js 22.0 is uitgebracht, een platform voor het uitvoeren van netwerkapplicaties in JavaScript. Node.js 22.0 is geclassificeerd als een ondersteuningstak voor de lange termijn, maar deze status zal pas in oktober worden toegewezen, na stabilisatie. Node.js 22.x wordt ondersteund tot 30 april 2027. Het onderhoud van de vorige LTS-tak van Node.js 20.x duurt tot april 2026, en het jaar daarvoor de laatste LTS-tak 18.x tot april 2025. De staging-tak van Node.js 21.x wordt stopgezet op 1 juni 2024.

Belangrijkste verbeteringen:

  • De V8-motor is bijgewerkt naar versie 12.4, gebruikt in Chromium 124. Onder de wijzigingen ten opzichte van de Node.js 21-tak, die de V8 11.8-motor gebruikte, wordt opgemerkt:
    • Ondersteuning voor de WasmGC-extensie, die het porten van programma's die zijn geschreven in programmeertalen die een garbage collector gebruiken (Kotlin, PHP, Java, enz.) naar WebAssembly vereenvoudigt. WasmGC voegt nieuwe soorten structuren en arrays toe die niet-lineaire geheugentoewijzing kunnen gebruiken.
    • Ondersteuning voor de methode Array.fromAsync(), die asynchroon een nieuw exemplaar retourneert van een Array-object dat is gekopieerd van een array-achtig, itereerbaar of asynchroon itereerbaar object.
    • Ondersteuning voor iteratormethoden zoals .map, .filter, .find, .take, .drop, .forEach en .reduce.
    • Ondersteuning voor een Set-object dat een verzameling waarden definieert en methoden biedt die algemene set-bewerkingen implementeren, zoals snijpunt, vereniging, verschil en optelling.
  • De Maglev-optimalisatie JIT-compiler is standaard ingeschakeld, gericht op het snel genereren van krachtige machinecode voor veelgebruikte JavaScript-code. Het inschakelen van Maglev kan kortstondige CLI-applicaties die geen langetermijnactiviteiten uitvoeren aanzienlijk versnellen. Zo wordt de tijd voor het voltooien van de Jetstrea-test met 7.5% verminderd en de snelheidsmetertest met 5%.
  • Het werken met streams is versneld door de waarde van de highWaterMark-optie te verhogen van 16 KB naar 65 KB (definieert de limiet waartoe opname wordt gebufferd). De wijziging resulteert in een groter geheugengebruik, dus toepassingen die zijn ontworpen om op een beperkt RAM-geheugen te worden uitgevoerd, moeten mogelijk terugkeren naar de oude waarde via een aanroep van setDefaultHighWaterMark().
  • Verbeterde prestaties van de fetch() en test runner API's door de AbortSignal-instantie efficiënter te maken. De prestaties van API's gerelateerd aan synchroon werken met bestandssystemen zijn verbeterd.
  • Er is een experimentele functie beschikbaar om de aanroep "require()" te gebruiken om JavaScript ESM-modules (ECMAScript Modules) in synchrone modus te laden. ESM-modules worden gebruikt in browsers en vervangen CommonJS-modules die specifiek zijn voor Node.js. Om te laden via "require()" moet de ESM-module in synchrone modus worden uitgevoerd (zonder te wachten op het hoogste niveau). Ondersteuning wordt ingeschakeld via de vlag “--experimenteel-require-module”.
  • Experimentele mogelijkheid toegevoegd om scripts uit te voeren die zijn gedefinieerd in het bestand package.json met behulp van de opdracht "--run". "
  • Het commando “node –watch” is verplaatst naar de stabiele categorie met de implementatie van een watch-modus die ervoor zorgt dat het proces opnieuw wordt gestart wanneer het geïmporteerde bestand verandert (als bijvoorbeeld “node –watch index.js” wordt uitgevoerd, wordt de opdracht proces wordt automatisch opnieuw gestart wanneer index.js verandert).
  • De native implementatie van de WebSocket API is gestabiliseerd, waardoor WebSocket in clientmodus kan worden gebruikt zonder extra afhankelijkheden te installeren.
  • Gedeeltelijke ondersteuning toegevoegd voor de Navigator API.
  • De Webstreams API heeft ondersteuning toegevoegd voor het deflate-raw-compressieformaat.
  • Glob- en globSync-functies toegevoegd aan node:fsmodule voor patroonmatching van bestandspaden.
  • Verbeterde afhandeling van onjuist geconfigureerde IPv6-stacks. Geïmplementeerd Happy Eyeballs-algoritme voor snel terugdraaien in geval van problemen met IPv6-werking.
  • De util-API is verouderd.
  • Bijgewerkte afhankelijkheidsversies: 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 naar 3.8.0, ada 2.7.7 en undici 6.6.0 .

Het Node.js-platform kan zowel worden gebruikt voor serveronderhoud van webapplicaties als voor het maken van reguliere client- en servernetwerkprogramma's. Om de functionaliteit van applicaties voor Node.js uit te breiden, is een grote verzameling modules voorbereid, waarin u modules kunt vinden met de implementatie van HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3-servers en -clients, modules voor integratie met verschillende webframeworks, WebSocket- en Ajax-handlers, DBMS-connectoren (MySQL, PostgreSQL, SQLite, MongoDB), templating-engines, CSS-engines, implementaties van crypto-algoritmen en autorisatiesystemen (OAuth), XML-parsers.

Om grote aantallen parallelle verzoeken af ​​te handelen, gebruikt Node.js een asynchrone code-uitvoeringsmodel op basis van niet-blokkerende gebeurtenisverwerking en definiërende callback-handlers. Ondersteunde methoden voor het multiplexen van verbindingen zijn epoll, kqueue, /dev/poll en select. Voor verbindingsmultiplexing wordt de libuv-bibliotheek gebruikt, een add-on voor libev op Unix-systemen en voor IOCP op Windows. De libeio-bibliotheek wordt gebruikt om een ​​threadpool te maken, en c-ares is geïntegreerd om DNS-query's in een niet-blokkerende modus uit te voeren. Alle systeemaanroepen die blokkering veroorzaken, worden binnen de threadpool uitgevoerd en geven vervolgens, net als signaalbehandelaars, het resultaat van hun werk terug via een naamloze pijp.

De uitvoering van JavaScript-code wordt verzekerd door het gebruik van de door Google ontwikkelde V8-engine (daarnaast ontwikkelt Microsoft een versie van Node.js met de Chakra-Core-engine). In de kern is Node.js vergelijkbaar met de Perl AnyEvent-, Ruby Event Machine-, Python Twisted-frameworks en de implementatie van gebeurtenissen in Tcl, maar de gebeurtenislus in Node.js is verborgen voor de ontwikkelaar en lijkt op gebeurtenisverwerking in een webapplicatie draait in browser.

Bron: opennet.ru

Voeg een reactie