La version 21.0 de Node.js a été publiée, une plateforme pour exécuter des applications réseau en JavaScript. Le support de la branche Node.js 21.0 sera assuré pendant 6 mois. Dans les jours à venir, la stabilisation de la branche Node.js 20 sera achevée, qui obtiendra le statut LTS et sera supportée jusqu'en avril 2026. Le support de l'ancienne branche LTS Node.js 18.0 se poursuivra jusqu'en septembre 2025, tandis que celui de la branche LTS précédente 16.0 durera jusqu'en avril 2024.
Améliorations principales :
- L'API Fetch, destinĂ©e au tĂ©lĂ©chargement de ressources sur le rĂ©seau et facilitant l'Ă©criture de code JavaScript universel adaptĂ© aux travaux cĂŽtĂ© serveur et client, a Ă©tĂ© annoncĂ©e comme stable. L'implĂ©mentation est basĂ©e sur le code du client HTTP/1.1 undici et se rapproche au maximum d'une API similaire fournie dans les navigateurs. L'API comprend la mĂ©thode fetch() et les objets Headers, Request et Response, reprĂ©sentant les en-tĂȘtes HTTP, la requĂȘte et la rĂ©ponse. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
- Le support de l'API WebStreams a été stabilisé, fournissant l'accÚs à des flux de données reçues via le réseau. L'API permet d'ajouter des gestionnaires qui traitent les données à mesure qu'elles arrivent via le réseau, sans attendre le téléchargement complet du fichier. Dans Node.js, des objets tels que ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream et DecompressionStream sont disponibles.
- Une implĂ©mentation expĂ©rimentale du client WebSocket a Ă©tĂ© ajoutĂ©e, compatible avec les navigateurs.. Pour activer le support de WebSocket, un drapeau «âexperimental-websocket» a Ă©tĂ© prĂ©vu.
- Un mode expĂ©rimental par dĂ©faut a Ă©tĂ© ajoutĂ© pour l'utilisation des modules JavaScript ESM (ECMAScript Modules, utilisĂ© dans les modules pour navigateurs) au lieu de CommonJS (spĂ©cifique Ă Node.js). Ce changement n'affecte pas les modules dont le format est explicitement dĂ©fini par le champ «type» dans package.json, spĂ©cifiĂ© par le drapeau «âinput-type» ou Ă©vident en raison de l'extension de fichier (.mjs pour ESM, .cjs pour CommonJS). Ainsi, les modules qui ne sont pas explicitement dĂ©finis comme CommonJS (par exemple, avec l'extension «.js») seront considĂ©rĂ©s comme des modules ESM lorsque le nouveau mode est activĂ©. Un drapeau «âexperimental-default-type» a Ă©tĂ© proposĂ© pour activer les nouvelles configurations des modules.
- Le moteur V8 a été mis à jour vers la version 11.8, utilisée dans Chromium 118, qui a introduit le support de la méthode ArrayBuffer.prototype.transfer, de la possibilité de regrouper des tableaux (méthode groupBy) et des instructions de traitement de constantes WebAssembly (i32.add, i32.sub, i32.mul, i64.add, i64.sub et i64.mul).
- Le support de globalPreload a été interrompu, et il est maintenant recommandé d'utiliser les appels register et initialize pour configurer les modules.
- La fonction fs.writeFile a été enrichie de l'option « flush » pour forcer l'écriture des données sur le disque aprÚs chaque opération d'écriture.
- Les performances du code lié à l'analyse des URL, à l'API fetch, aux streams, à node:fs et à HTTP ont été améliorées.
- Un objet global navigator a Ă©tĂ© ajoutĂ©. Par exemple, pour obtenir des informations sur le nombre de cĆurs CPU, vous pouvez utiliser la propriĂ©tĂ© navigator.hardwareConcurrency.
- Le paramÚtre « --test » prend désormais en charge les masques globaux pour choisir les tests à exécuter (par exemple, vous pouvez spécifier « --test **/*.test.js »).
- Le gestionnaire de paquets npm 10.2.0 et le parseur llhttp 9.1.2 ont été mis à jour.
- Le support de Visual Studio 2019 et des versions de macOS antérieures à 11.0 a été interrompu.
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
