Plateforme JavaScript côté serveur Node.js 21.0 disponible

Node.js 21.0 est sorti, une plate-forme permettant d'exécuter des applications réseau en JavaScript. La branche Node.js 21.0 sera supportée pendant 6 mois. Dans les prochains jours, la stabilisation de la branche Node.js 20 sera achevée, qui recevra le statut LTS et sera supportée jusqu'en avril 2026. La maintenance de la précédente branche LTS de Node.js 18.0 durera jusqu'en septembre 2025, et l'année avant la dernière branche LTS 16.0 jusqu'en avril 2024.

Principales améliorations :

  • L'API Fetch a été déclarée stable, conçue pour charger des ressources sur le réseau et simplifier l'écriture de code JavaScript universel adapté au travail côté serveur et client. L'implémentation est basée sur le code du client unique HTTP/1.1 et est aussi proche que possible de l'API similaire fournie dans les navigateurs. L'API inclut la méthode fetch() et les objets Headers. Requête et réponse, représentant les en-têtes HTTP, la requête et la réponse. const res = wait fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = wait res.json(); console.log(données); }
  • La prise en charge de l'API WebStreams, qui permet d'accéder aux flux de données reçus sur le réseau, a été stabilisée. L'API permet d'ajouter vos propres gestionnaires qui travaillent avec les données au fur et à mesure que les informations arrivent sur le réseau, sans attendre que l'intégralité du fichier soit téléchargée. Les objets disponibles dans Node.js incluent ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream et DecompressionStream.
  • Ajout de l'implémentation expérimentale du client WebSocket, compatible avec les navigateurs. Pour activer la prise en charge de WebSocket, l'indicateur « --experimental-websocket » est fourni.
  • Ajout d'un mode expérimental pour utiliser l'implémentation par défaut des modules JavaScript ESM (ECMAScript Modules, utilisés dans les modules pour navigateurs) au lieu de CommonJS (spécifique à Node.js). Le changement n'affecte pas les modules dont le format est explicitement défini via le champ "type" dans package.json, spécifié via l'indicateur "--input-type", ou est évident en raison de l'extension du fichier (.mjs pour ESM, .cjs pour CommonJS). Cependant, les modules qui ne sont pas explicitement définis comme CommonJS (par exemple, qui ont une extension « .js ») seront traités comme des modules ESM lorsque le nouveau mode est activé. Pour activer les nouveaux paramètres du module, l'indicateur « --experimental-default-type » a été proposé.
  • Le moteur V8 a été mis à jour vers la version 11.8, utilisée dans Chromium 118, qui prend désormais en charge la méthode ArrayBuffer.prototype.transfer, la possibilité de regrouper des tableaux (méthode groupBy) et les instructions WebAssembly pour le traitement des constantes (i32.add, i32.sub, i32.mul, i64.add, i64.sub et i64.mul).
  • La prise en charge du gestionnaire globalPreload a été interrompue, au profit des appels d'enregistrement et d'initialisation pour configurer les modules.
  • Une option « flush » a été ajoutée à la fonction fs.writeFile pour forcer le vidage des données sur le lecteur après chaque opération d'écriture.
  • Amélioration des performances du code lié à l'analyse d'URL, à l'API de récupération, aux flux, à node:fs et à HTTP.
  • Ajout d'un objet navigateur global. Par exemple, pour obtenir des données sur le nombre de cœurs de processeur, vous pouvez utiliser la propriété navigator.hardwareConcurrency.
  • Dans le paramètre « -test », la prise en charge des masques globaux a été ajoutée pour sélectionner les tests à exécuter (par exemple, vous pouvez spécifier « -test **/*.test.js. »).
  • Le gestionnaire de packages fourni npm 10.2.0 et l'analyseur llhttp 9.1.2 ont été mis à jour.
  • La prise en charge de Visual Studio 2019 et des versions de macOS antérieures à 11.0 a été interrompue.

La plate-forme Node.js peut être utilisée à la fois pour la maintenance du serveur d'applications Web et pour la création de programmes réseau client et serveur réguliers. Pour étendre les fonctionnalités des applications pour Node.js, une grande collection de modules a été préparée, dans laquelle vous pouvez trouver des modules avec la mise en œuvre de HTTP, SMTP, XMPP, DNS, FTP, IMAP, serveurs et clients POP3, modules d'intégration avec divers frameworks web, des gestionnaires WebSocket et Ajax, des connecteurs SGBD (MySQL, PostgreSQL, SQLite, MongoDB), des moteurs de templates, des moteurs CSS, des implémentations d'algorithmes de chiffrement et de systèmes d'autorisation (OAuth), des parseurs XML.

Pour assurer le traitement d'un grand nombre de requêtes parallèles, Node.js utilise un modèle d'exécution de code asynchrone basé sur la gestion d'événements non bloquants et la définition de gestionnaires de rappel. Les méthodes prises en charge pour les connexions multiplexées sont epoll, kqueue, /dev/poll et select. Pour le multiplexage des connexions, la bibliothèque libuv est utilisée, qui est un module complémentaire pour libev sur les systèmes Unix et IOCP sur 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 qui provoquent un blocage sont exécutés à l'intérieur du pool de threads, puis, comme les gestionnaires de signaux, transfèrent le résultat de leur travail via un canal sans nom (pipe). 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 Tcl, mais la boucle d'événements dans Node.js est masquée pour le développeur et ressemble à la gestion des événements dans une application Web en cours d'exécution. dans le navigateur. Lors de l'écriture d'applications pour node.js, vous devez tenir compte des spécificités de la programmation événementielle, par exemple, au lieu de faire "var result = db.query("select..");" avec attente de l'achèvement des travaux et traitement ultérieur des résultats, Node.js utilise le principe de l'exécution asynchrone, c'est-à-dire le code est transformé en "db.query("select..", function (result) {result processing});", dans lequel le contrôle passera instantanément à un autre code, et le résultat de la requête sera traité au fur et à mesure que les données arrivent.

Source: opennet.ru

Ajouter un commentaire