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

La sortie de Node.js 20.0, une plateforme d'exécution d'applications réseau en JavaScript, a eu lieu. Node.js 20.0 a été attribué à la branche support long, mais ce statut ne sera attribué qu'en octobre, après stabilisation. Node.js 20.x sera pris en charge jusqu'au 30 avril 2026. La maintenance de la branche précédente Node.js 18.x LTS durera jusqu'en avril 2025, et la branche précédente 16.x LTS jusqu'en septembre 2023. La branche 14.x LTS sera demaintenue le 30 avril, et la branche intérimaire Node.js 19.x le 1er juin.

Principales améliorations :

  • Le moteur V8 a été mis à jour vers la version 11.3, qui est utilisée dans Chromium 113. Parmi les changements par rapport à la branche Node.js 19, qui utilisait le moteur Chromium 107, les fonctions String.prototype.isWellFormed et toWellFormed, la Array.prototype et les méthodes TypedArray.prototype pour travailler avec la copie lors de la modification des objets Array et TypedArray, indicateur "v" dans RegExp, prise en charge du redimensionnement de ArrayBuffer et de l'augmentation de la taille de SharedArrayBuffer, appel final dans WebAssembly.
  • Un mécanisme expérimental de modèle de permission est proposé qui permet de restreindre l'accès à certaines ressources pendant l'exécution. La prise en charge du modèle d'autorisation est activée en spécifiant l'indicateur "--experimental-permission" lors de l'exécution. Dans l'implémentation initiale, des options ont été proposées pour restreindre l'accès en écriture (--allow-fs-write) et en lecture (--allow-fs-read) à certaines parties du FS, les processus enfants (--allow-child-process) , modules complémentaires (--no-addons ) et threads (--allow-worker). Par exemple, pour autoriser l'écriture dans le répertoire /tmp et la lecture du fichier /home/index.js, vous pouvez spécifier : node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js index .js

    Pour vérifier l'accès, il est suggéré d'utiliser la méthode process.permission.has(), par exemple, "process.permission.has('fs.write',"/tmp/test").

  • Les gestionnaires pour les modules externes ECMAScript (ESM) chargés via l'option "--experimental-loader" sont désormais exécutés dans un thread séparé, isolé du thread principal, ce qui élimine l'intersection du code d'application et des modules ESM chargés. Semblable aux navigateurs, la méthode import.meta.resolve() s'exécute désormais de manière synchrone lorsqu'elle est appelée depuis une application. Dans l'une des prochaines branches de Node.js, la prise en charge du chargement ESM devrait être déplacée vers la catégorie des fonctionnalités stables.
  • Le module node:test (test_runner), conçu pour créer et exécuter des tests JavaScript qui renvoient des résultats au format TAP (Test Anything Protocol), a été déplacé vers stable.
  • Une équipe de performance distincte a été formée, qui, en préparation de la nouvelle branche, a travaillé pour accélérer divers composants d'exécution, y compris l'analyse d'URL, fetch () et EventTarget. Par exemple, la surcharge d'initialisation de EventTarget a été réduite de moitié, les performances de la méthode URL.canParse() ont été considérablement améliorées et l'efficacité des minuteries a été améliorée. De plus, la sortie d'un analyseur d'URL hautes performances - Ada 2.0, écrit en C ++, est incluse dans la composition.
  • Le développement d'une fonctionnalité expérimentale de livraison d'applications sous la forme d'un seul fichier exécutable (SEA, Single Executable Applications) s'est poursuivi. La création d'un exécutable nécessite désormais de substituer un blob généré à partir d'un fichier de configuration JSON (au lieu de substituer un fichier JavaScript).
  • Amélioration de la compatibilité de l'API Web Crypto avec les implémentations d'autres projets.
  • Ajout de la prise en charge officielle de Windows sur les systèmes ARM64.
  • Prise en charge continue des extensions WASI (WebAssembly System Interface) pour la création d'applications WebAssembly autonomes. Suppression de la nécessité de spécifier un indicateur de ligne de commande spécial pour activer la prise en charge de WASI.

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