La version 23.0.0 de Node.js, la plateforme pour l'exécution d'applications réseau en JavaScript, est désormais disponible. Node.js 23.0 est classé dans les branches intermédiaires, qui seront maintenues pendant 7 mois (jusqu'en juin 2025). Dans les prochains jours, la stabilisation de la branche Node.js 22 sera achevée, et celle-ci obtiendra le statut LTS le 29 octobre, avec un support garanti jusqu'en avril 2027. Le support des anciennes branches LTS Node.js 20.x et 18.x se poursuivra jusqu'en avril 2026 et 2025 respectivement.
Améliorations principales :
- Le support expĂ©rimental du langage TypeScript a Ă©tĂ© ajoutĂ©, permettant la dĂ©finition explicite des types. Ce support sâactive via les options « âexperimental-strip-types » et « âexperimental-transform-types ». Avec la premiĂšre option, l'utilisation de TypeScript se limite Ă la suppression des dĂ©finitions de types spĂ©cifiques Ă ce langage (la vĂ©rification des types n'est pas effectuĂ©e, le code est simplement converti en JavaScript sans types). La deuxiĂšme option transforme certains Ă©lĂ©ments de syntaxe TypeScript en code JavaScript, comme les Ă©numĂ©rations (enum) et les espaces de noms (namespace).
- Par dĂ©faut, il est dĂ©sormais possible d'utiliser l'appel « require() » pour 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() », le module doit ĂȘtre exĂ©cutĂ© en mode synchrone (sans await au niveau supĂ©rieur).
- La dĂ©tection automatique des modules ESM dans les fichiers sans extension ou avec l'extension « .js » a Ă©tĂ© assurĂ©e. Auparavant, ces fichiers Ă©taient considĂ©rĂ©s comme des modules CommonJS, sauf si leur type Ă©tait explicitement spĂ©cifiĂ© dans le fichier package.json du mĂȘme rĂ©pertoire (« type »: « module »). Dans la nouvelle version, pour les fichiers dont le type n'est pas dĂ©fini dans package.json, une tentative de chargement en tant que module CommonJS est d'abord effectuĂ©e, et si cela Ă©choue, en tant que module ESM.
- Ajout d'une implĂ©mentation expĂ©rimentale compatibles avec les navigateurs API Web Storage, destinĂ© au stockage permanent (classe localStorage) ou temporaire (classe sessionStorage) des donnĂ©es au format clĂ©/valeur. Pour activer le support de Web Storage, il est nĂ©cessaire de lancer avec le drapeau « âexperimental-webstorage » et de spĂ©cifier le chemin du fichier de stockage via le drapeau « âlocalstorage-file ».
- Une API SQLite expĂ©rimentale a Ă©tĂ© ajoutĂ©e pour travailler avec des bases de donnĂ©es en utilisant le langage de requĂȘtes SQL et le stockage basĂ© sur la bibliothĂšque SQLite. En plus de stocker la base de donnĂ©es dans un fichier sur le disque, elle peut Ă©galement ĂȘtre placĂ©e en mĂ©moire en spĂ©cifiant « :memory :» au lieu du nom du fichier. L'API Web Storage mentionnĂ©e ci-dessus est Ă©galement implĂ©mentĂ©e au-dessus de SQLite, ce qui a conduit Ă l'ajout de SQLite en tant que dĂ©pendance pour Node.js.
- L'Ă©quipe « node ârun » a Ă©tĂ© dĂ©clarĂ©e stable, conçue pour exĂ©cuter des scripts dĂ©finis dans le fichier package.json.
- Un support optionnel pour le stockage en cache du code compilé sur le disque a été implémenté pour accélérer considérablement le démarrage des modules. L'activation du stockage en cache se fait via la variable d'environnement NODE_COMPILE_CACHE. Cette fonctionnalité ressemble au package v8-compile-cache mais offre de meilleures performances et prend en charge les modules ESM.
- L'optimisation de l'objet Buffer a permis d'améliorer significativement les performances des méthodes Buffer.copy() et Buffer.write().
- Les performances du module node:fs ont été améliorées, réduisant également le nombre d'appels de code C++ pendant l'exécution.
- Le moteur V8 a été mis à jour vers la version 12.9, utilisée dans Chromium 129.
- La prise en charge des systÚmes 32 bits avec Windows a été supprimée.
- En raison de l'intégration dans Node.js et dans le moteur V8 de fonctionnalités définies dans la norme C++20, les exigences pour la version du compilateur GCC ont été augmentées. Pour compiler Node.js, la version GCC 12 est désormais requise.
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
