La version 22.0 de Node.js, la plateforme d'exécution d'applications réseau en JavaScript, a été publiée. Node.js 22.0 est classé parmi les versions avec support à long terme, mais ce statut ne sera attribué qu'en octobre, aprÚs une période de stabilisation. Le support de Node.js 22.x sera assuré jusqu'au 30 avril 2027. Le soutien pour la branche LTS précédente Node.js 20.x se poursuivra jusqu'en avril 2026, et pour la branche LTS antérieure 18.x jusqu'en avril 2025. Le soutien pour la branche intermédiaire Node.js 21.x cessera le 1er juin 2024.
Améliorations principales :
- Le moteur V8 a été mis à jour vers la version 12.4, utilisée dans Chromium 124. Parmi les changements par rapport à la branche Node.js 21, qui utilisait le moteur V8 11.8, on peut noter :
- Support de l'extension WasmGC, facilitant le portage en WebAssembly des programmes Ă©crits dans des langages de programmation utilisant un ramasse-miettes (Kotlin, PHP, Java, etc.). WasmGC ajoute de nouveaux types de structures et de tableaux pour lesquels une allocation de mĂ©moire non linĂ©aire peut ĂȘtre appliquĂ©e.
- Support de la méthode Array.fromAsync(), qui renvoie en mode asynchrone une nouvelle instance de l'objet Array, copiée à partir d'objets semblables à des tableaux, itérables (iterable) ou itérables asynchrones (async iterable).
- Support des méthodes pour travailler avec les itérateurs, telles que .map, .filter, .find, .take, .drop, .forEach et .reduce.
- Support de l'objet Set, qui définit une collection de valeurs et propose des méthodes implémentant des opérations typiques sur les ensembles, telles que les intersections, les unions, la différence et le complément.
- Le compilateur JIT optimiseur Maglev est activé par défaut, visant à générer rapidement du code machine hautes performances pour le code JavaScript utilisé. L'activation de Maglev permet d'accélérer considérablement le fonctionnement des applications CLI à court terme, qui ne réalisent pas d'opérations longues ; par exemple, le temps de passage du test Jetstream est réduit de 7,5 % et le test Speedometer de 5 %.
- Les performances avec les flux ont été améliorées grùce à l'augmentation de la valeur de l'option highWaterMark de 16 Ko à 65 Ko (définit la limite jusqu'à laquelle le buffering d'écriture est effectué). Ce changement entraßne une augmentation de la consommation de mémoire, donc les applications conçues pour fonctionner avec une quantité limitée de RAM peuvent devoir revenir à l'ancienne valeur en appelant setDefaultHighWaterMark().
- Les performances de l'API fetch() et du test runner ont été améliorées grùce à une meilleure efficacité de la création d'instances d'AbortSignal. Les performances des API liées aux opérations synchrones avec les systÚmes de fichiers ont également été renforcées.
- Une fonctionnalitĂ© expĂ©rimentale a Ă©tĂ© introduite pour utiliser l'appel « require() » afin de charger des modules JavaScript ESM (ECMAScript Modules) de maniĂšre synchrone. Les modules ESM sont utilisĂ©s dans les navigateurs et remplacent les modules CommonJS spĂ©cifiques Ă Node.js. Pour charger un module ESM via « require() », il doit ĂȘtre exĂ©cutĂ© en mode synchrone (sans await au niveau supĂ©rieur). Le support est activĂ© grĂące au drapeau « âexperimental-require-module ».
- Une possibilitĂ© expĂ©rimentale a Ă©tĂ© ajoutĂ©e pour exĂ©cuter des scripts dĂ©finis dans le fichier package.json en utilisant la commande « ârun ».
- La commande « node âwatch » a Ă©tĂ© transfĂ©rĂ©e dans la catĂ©gorie stable avec la mise en Ćuvre d'un mode de surveillance, permettant le redĂ©marrage du processus lors de la modification d'un fichier importĂ© (par exemple, lors de l'exĂ©cution de « node âwatch index.js », le processus sera automatiquement redĂ©marrĂ© lors de la modification de index.js).
- L'implémentation intégrée de l'API WebSocket a été stabilisée, permettant d'utiliser WebSocket en mode client sans installer de dépendances supplémentaires.
- Un support partiel de l'API Navigator a été ajouté.
- Le format de compression deflate-raw a été ajouté au l'API Webstreams.
- Le module node:fsmodule a été enrichi des fonctions glob et globSync pour le filtrage des chemins de fichiers selon un modÚle.
- Le traitement des piles IPv6 mal configurĂ©es a Ă©tĂ© amĂ©liorĂ©. L'algorithme 'Happy Eyeballs' a Ă©tĂ© mis en Ćuvre pour un retour rapide en cas de problĂšmes de fonctionnement de l'IPv6.
- L'API util a été déclarée obsolÚte.
- Les versions des dépendances ont été mises à jour : 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 et undici 6.6.0.
La plateforme Node.js peut ĂȘtre utilisĂ©e Ă la fois pour le soutien serveur des applications Web et pour la crĂ©ation de programmes rĂ©seau clients et serveurs traditionnels. Pour Ă©tendre la fonctionnalitĂ© des applications Node.js, une grande collection de modules a Ă©tĂ© prĂ©parĂ©e, oĂč l'on peut trouver des modules avec implĂ©mentation. serveurs et des clients HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, des modules pour l'intĂ©gration avec divers frameworks web, des gestionnaires WebSocket et Ajax, des connecteurs vers des SGBD (MySQL, PostgreSQL, SQLite, MongoDB), des moteurs de templates, des moteurs CSS, des implĂ©mentations d'algorithmes cryptographiques et des systĂšmes d'authentification (OAuth), des parseurs XML.
Pour traiter un grand nombre de requĂȘtes simultanĂ©es, Node.js utilise un modĂšle d'exĂ©cution de code asynchrone, basĂ© sur le traitement d'Ă©vĂ©nements en mode non-bloquant et la dĂ©finition de gestionnaires de callbacks. Pour le multiplexage des connexions, des mĂ©thodes telles que epoll, kqueue, /dev/poll et select sont supportĂ©es. La bibliothĂšque libuv, qui est une surcouche de libev sur les systĂšmes Unix et de IOCP sur Windows, est utilisĂ©e pour le multiplexage des connexions. La bibliothĂšque libeio est utilisĂ©e pour crĂ©er un pool de threads (thread pool), et c-ares est intĂ©grĂ© pour effectuer des requĂȘtes DNS en mode non-bloquant. Tous les appels systĂšmes pouvant bloquer sont exĂ©cutĂ©s Ă l'intĂ©rieur du pool de threads et, tout comme les gestionnaires de signaux, transmettent les rĂ©sultats de leur travail via un canal anonyme (pipe).
L'exécution du code JavaScript est assurée par le moteur V8 développé par Google (en outre, Microsoft développe une version de Node.js avec le moteur Chakra-Core). En essence, Node.js ressemble aux frameworks Perl AnyEvent, Ruby Event Machine, Python Twisted et à l'implémentation d'événements en Tcl, mais la boucle d'événements dans Node.js est cachée du développeur et rappelle le traitement d'événements dans une application web fonctionnant dans un navigateur.
Source : opennet.ru
