La version 19.0 de Node.js, une plateforme pour l'exécution d'applications réseau en JavaScript, est sortie. Node.js 19 appartient à la branche avec un support standard, des mises à jour seront fournies jusqu'en juin 2023. Dans les jours à venir, la stabilisation de la branche Node.js 18 sera finalisée, qui obtiendra le statut LTS et sera supportée jusqu'en avril 2025. Le soutien de l'ancienne branche LTS Node.js 16.0 se poursuivra jusqu'en septembre 2023, et celui de l'avant-dernière LTS 14.0 jusqu'en avril 2023.
Améliorations principales :
- Le moteur V8 a été mis à jour vers la version 10.7, utilisée dans Chromium 107. Parmi les changements par rapport à la branche Node.js 18, on note la mise en œuvre de la troisième version de l'API Intl.NumberFormat, qui ajoute de nouvelles fonctions formatRange(), formatRangeToParts() et selectRange(), ainsi que le regroupement de ensembles, de nouvelles options de mise à l'échelle et de définition de précision, et la possibilité d'interpréter des chaînes comme des nombres décimaux. Les dépendances llhttp 8.1.0 et npm 8.19.2 incluses dans le paquet ont également été mises à jour.
- Une commande expérimentale "node —watch" a été proposée, mettant en œuvre un mode de surveillance qui redémarre le processus en cas de modification du fichier importé (par exemple, en exécutant "node —watch index.js", le processus sera automatiquement redémarré lors de la modification de index.js).
- La prise en charge du mécanisme HTTP 1.1 Keep-Alive a été activée pour toutes les connexions HTTP/HTTPS sortantes, laissant la connexion ouverte un certain temps pour traiter plusieurs requêtes HTTP dans un seul lien. Il est prévu que l'utilisation de Keep-Alive augmentera la bande passante et les performances. Par défaut, le délai d'attente pour maintenir la connexion ouverte est fixé à 5 secondes. La mise en œuvre du client HTTP a ajouté le support de l'analyse des en-têtes HTTP Keep-Alive dans les réponses de serveurs, et dans la mise en œuvre du serveur HTTP de Node.js, la déconnexion automatique des clients inactifs utilisant Keep-Alive a été ajoutée.
- L'API WebCrypto a été promue au statut stable, sauf pour les fonctions utilisant les algorithmes Ed25519, Ed448, X25519 et X448. L'accès au module WebCrypto peut maintenant se faire via globalThis.crypto ou require('node:crypto').webcrypto.
- La prise en charge des outils de traçage DTrace, SystemTap et ETW (Event Tracing for Windows) a été supprimée, leur maintien étant jugé peu judicieux en raison de la complexité de leur prise en charge dans leur état actuel sans un plan adéquat.
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 rappel (callback). Il prend en charge plusieurs méthodes de multiplexage de connexions, telles que epoll, kqueue, /dev/poll et select. La bibliothèque libuv est utilisée pour le multiplexage de connexions, qui est une couche au-dessus de libev dans les systèmes Unix et de IOCP sous Windows. La création d'un pool de threads est gérée par la bibliothèque libeio, tandis que c-ares est intégré pour exécuter des requêtes DNS en mode non-bloquant. Tous les appels système bloquants sont exécutés dans le pool de threads et, comme les gestionnaires de signaux, transmettent leurs résultats via un canal anonyme (pipe). L'exécution de code JavaScript est assurée par l'utilisation du moteur V8 développé par Google (Microsoft développe également 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 des événements en Tcl, mais la boucle d'événements dans Node.js est cachée par le développeur et rappelle le traitement des événements dans une application web fonctionnant dans un navigateur. Lors de l'écriture d'applications pour Node.js, il est nécessaire de prendre en compte les particularités de la programmation orientée événements, par exemple, au lieu d'exécuter « var result = db.query('select..'); » en attendant la fin du traitement et le traitement des résultats, Node.js utilise le principe d'exécution asynchrone, c'est-à-dire que le code est transformé en « db.query('select..', function (result) { traitement du résultat }); », permettant un transfert immédiat de contrôle vers le code suivant, tandis que le résultat de la requête sera traité à mesure que les données arrivent.
Source : opennet.ru
