Node.js 22.0 est sorti, une plate-forme permettant d'exécuter des applications réseau en JavaScript. Node.js 22.0 est classé comme branche de support à long terme, mais ce statut ne sera attribué qu'en octobre, après stabilisation. Node.js 22.x sera pris en charge jusqu'au 30 avril 2027. La maintenance de la précédente branche LTS de Node.js 20.x durera jusqu'en avril 2026, et l'année avant la dernière branche LTS 18.x jusqu'en avril 2025. La branche intermédiaire de Node.js 21.x sera interrompue le 1er juin 2024.
Principales améliorations :
- 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 note :
- Prise en charge de l'extension WasmGC, qui simplifie le portage de programmes écrits dans des langages de programmation utilisant un garbage collector (Kotlin, PHP, Java, etc.) vers WebAssembly. WasmGC ajoute de nouveaux types de structures et de tableaux pouvant utiliser une allocation de mémoire non linéaire.
- Prise en charge de la méthode Array.fromAsync(), qui renvoie de manière asynchrone une nouvelle instance d'un objet Array copiée à partir d'un objet itérable de type tableau, itérable ou asynchrone.
- Prise en charge des méthodes itératrices telles que .map, .filter, .find, .take, .drop, .forEach et .reduce.
- Prise en charge d'un objet Set qui définit une collection de valeurs et propose des méthodes qui implémentent des opérations d'ensemble courantes, telles que l'intersection, l'union, la différence et l'addition.
- Le compilateur JIT d'optimisation Maglev est activé par défaut, visant à générer rapidement du code machine hautes performances pour le code JavaScript très utilisé. L'activation de Maglev peut accélérer considérablement les applications CLI de courte durée qui n'effectuent pas d'opérations à long terme. Par exemple, le temps nécessaire pour terminer le test Jetstrea est réduit de 7.5 % et le test du compteur de vitesse de 5 %.
- Le travail avec les flux a été accéléré en augmentant la valeur de l'option highWaterMark de 16 Ko à 65 Ko (définit la limite jusqu'à laquelle l'enregistrement est mis en mémoire tampon). Le changement entraîne une consommation de mémoire accrue, de sorte que les applications conçues pour fonctionner avec une RAM limitée devront peut-être revenir à l'ancienne valeur via un appel à setDefaultHighWaterMark().
- Amélioration des performances des API fetch() et test runner en rendant l'instanciation AbortSignal plus efficace. Les performances des API liées au travail synchrone avec les systèmes de fichiers ont été améliorées.
- Une fonctionnalité expérimentale a été fournie pour utiliser l'appel "require()" pour charger des modules JavaScript ESM (modules ECMAScript) en mode synchrone. Les modules ESM sont utilisés dans les navigateurs et remplacent les modules CommonJS spécifiques à Node.js. Pour charger via "require()", le module ESM doit être exécuté en mode synchrone (sans attente au niveau supérieur). La prise en charge est activée via l'indicateur « --experimental-require-module ».
- Ajout de la possibilité expérimentale d'exécuter des scripts définis dans le fichier package.json à l'aide de la commande "--run" "
- La commande « node –watch » a été déplacée vers la catégorie stable avec la mise en place d'un mode watch qui garantit que le processus est redémarré lorsque le fichier importé change (par exemple, si « node –watch index.js » est exécuté, le le processus sera automatiquement redémarré lorsque index.js changera).
- L'implémentation native de l'API WebSocket a été stabilisée, permettant d'utiliser WebSocket en mode client sans installer de dépendances supplémentaires.
- Ajout d'un support partiel pour l'API Navigator.
- L'API Webstreams a ajouté la prise en charge du format de compression deflate-raw.
- Ajout des fonctions glob et globSync à node:fsmodule pour la correspondance de modèles des chemins de fichiers.
- Gestion améliorée des piles IPv6 mal configurées. Implémentation de l'algorithme Happy Eyeballs pour une restauration rapide en cas de problèmes de fonctionnement IPv6.
- L'API util est obsolète.
- Versions de dépendances 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 vers 3.8.0, ada 2.7.7 et undici 6.6.0 .
La plateforme Node.js peut être utilisée à la fois pour la prise en charge côté serveur des applications web et pour la création de programmes réseau standard côté client et côté serveur. Afin d'étendre les fonctionnalités des applications Node.js, une vaste collection de modules a été développée, notamment ceux implémentant les serveurs et des clients HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, des modules d'intégration avec divers frameworks web, des gestionnaires WebSocket et Ajax, des connecteurs vers les SGBD (MySQL, PostgreSQL, SQLite, MongoDB), des moteurs de modèles, des moteurs CSS, des implémentations d'algorithmes cryptographiques et de systèmes d'autorisation (OAuth), des analyseurs XML.
Pour gérer un grand nombre de requêtes parallèles, Node.js utilise un modèle d'exécution de code asynchrone basé sur le traitement des événements non bloquants et la définition de gestionnaires de rappel. Les méthodes prises en charge pour le multiplexage des connexions incluent epoll, kqueue, /dev/poll et select. Pour multiplexer les connexions, la bibliothèque libuv est utilisée, qui est un module complémentaire à libev sur les systèmes Unix et à IOCP sous Windows. La bibliothèque Libeio est utilisée pour créer un pool de threads et c-ares est intégré pour effectuer des requêtes DNS en mode non bloquant. Tous les appels système provoquant un blocage sont exécutés dans le pool de threads puis, comme les gestionnaires de signaux, renvoient le résultat de leur travail via un canal sans nom.
L'exécution du code JavaScript est assurée grâce à l'utilisation du moteur V8 développé par Google (par ailleurs, Microsoft développe une version de Node.js avec le moteur Chakra-Core). À la base, Node.js est similaire aux frameworks Perl AnyEvent, Ruby Event Machine, Python Twisted et à l'implémentation d'événements dans Tcl, mais la boucle d'événements dans Node.js est cachée au développeur et ressemble au traitement des événements dans une application Web. exécuté dans le navigateur.
Source: opennet.ru
