La plateforme serveur JavaScript Node.js 20.0 est maintenant disponible

La version Node.js 20.0 a été publiée, une plateforme pour exécuter des applications réseau en JavaScript. Node.js 20.0 est classée dans les branches avec support à long terme, mais ce statut ne sera accordé qu'en octobre, après une stabilisation. Le support de Node.js 20.x sera assuré jusqu'au 30 avril 2026. Le support de l'ancienne branche LTS Node.js 18.x se poursuivra jusqu'en avril 2025, tandis que l'avant-dernière branche LTS 16.x le sera jusqu'en septembre 2023. Le support de la branche LTS 14.x cessera le 30 avril et celui de la branche intermédiaire Node.js 19.x le 1er juin.

Améliorations principales :

  • Le moteur V8 a été mis à jour vers la version 11.3, utilisée dans Chromium 113. Parmi les changements par rapport à la branche Node.js 19, qui utilisait le moteur Chromium 107, on note les fonctionnalités String.prototype.isWellFormed et toWellFormed, des méthodes Array.prototype et TypedArray.prototype pour travailler avec des copies lors de la modification d'objets Array et TypedArray, le drapeau « v » dans RegExp, le support du redimensionnement d'ArrayBuffer et de l'augmentation de SharedArrayBuffer, ainsi que la récursion terminale (tail-call) dans WebAssembly.
  • Предложен экспериментальный механизм Permission Model, позволяющий ограничить доступ к определённым ресурсам в процессе исполнения. Поддержка Permission Model включается через указание при запуске флага «—experimental-permission». В начальной реализации предложены опции для ограничения доступа на запись (—allow-fs-write) и чтение (—allow-fs-read) к определённым частям ФС, дочерним процессам (—allow-child-process), дополнениям (—no-addons) и потокам (—allow-worker). Например, чтобы разрешить запись в каталог /tmp и чтение файла /home/index.js можно указать: node —experimental-permission —allow-fs-write=/tmp/ —allow-fs-read=/home/index.js index.js

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

  • Les gestionnaires de modules ECMAScript (ESM), chargés via l'option « —experimental-loader », s'exécutent désormais dans un thread séparé, isolé du thread principal, empêchant toute interférence entre le code des applications et les modules ESM chargés. À l'instar des navigateurs, la méthode import.meta.resolve() appelée depuis une application est désormais exécutée en mode synchrone. Dans l'une des prochaines branches de Node.js, le support du chargement des ESM devrait être transféré au niveau des fonctionnalités stables.
  • Le module node:test (test_runner), destiné à créer et exécuter des tests en JavaScript retournant un résultat au format TAP (Test Anything Protocol), a été transféré au statut stable.
  • Une équipe de développeurs dédiée à l'optimisation des performances a été formée. Lors de la préparation d'une nouvelle branche, elle a travaillé sur l'accélération de divers composants runtime, y compris l'analyse des URL, fetch() et EventTarget. Par exemple, les frais généraux lors de l'initialisation d'EventTarget ont été réduits de moitié, la performance de la méthode URL.canParse() a été considérablement améliorée, et l'efficacité des minuteries a été augmentée. De plus, une version de parseur URL hautes performances — Ada 2.0, écrite en C++, a été incluse.
  • Le développement de la capacité expérimentale pour la livraison d'applications sous forme d'un seul fichier exécutable (SEA, Single Executable Applications) a été poursuivi. La création du fichier exécutable nécessite désormais le remplacement d'un blob, formé à partir d'un fichier de configuration au format JSON (au lieu de remplacer un fichier JavaScript).
  • La compatibilité de l'API Web Crypto avec les implémentations d'autres projets a été améliorée.
  • La prise en charge officielle de Windows sur les systèmes ARM64 a été ajoutée.
  • La mise en œuvre du support des extensions WASI (WebAssembly System Interface) pour la création d'applications WebAssembly isolées a été poursuivie. L'exigence de spécifier un drapeau de ligne de commande spécial pour activer le support de WASI a été supprimée.

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

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster