Publication de la plateforme serveur JavaScript Node.js 14.0

A eu lieu la sortie Node.js 14.0, plateformes pour l'exécution d'applications réseau en JavaScript. Node.js 14.0 fait partie des versions à long terme, mais ce statut ne sera accordé qu'en octobre, après stabilisation. Le support de Node.js 14.0 sera assuré jusqu'en avril 2023. Le support de l'ancienne version LTS Node.js 12.0 se poursuivra jusqu'en avril 2022, et celui de la version LTS précédente 10.0 jusqu'en avril 2021. Le support de la version intermédiaire 13.x prendra fin en juin de cette année.

Principales améliorations:

  • La capacité de générer à la volée ou lors de certains événements des rapports de diagnostic, dans lesquels des événements sont reflétés pour aider à diagnostiquer des problèmes tels que les plantages, la baisse de performance, les fuites de mémoire, une forte charge CPU, des sorties d'erreurs imprévues, etc.
  • Un support expérimental pour l'API Async Local Storage a été ajouté, avec l'implémentation de la classe AsyncLocalStorage, qui peut être utilisée pour créer un état asynchrone avec des gestionnaires basés sur des callbacks et des promesses. AsyncLocalStorage permet de stocker des données pendant le traitement d'une requête web, semblable au stockage local pour des threads individuels dans d'autres langages.
  • L'affichage des avertissements concernant la fonctionnalité expérimentale a été supprimé lors du chargement modules ECMAScript 6 à l'importation et à l'exportation via les expressions import et export. Cependant, l'implémentation des modules ESM reste pour l'instant expérimentale.
  • Le moteur V8 a été mis à jour vers la version 8.1 (1, 2, 3), dans laquelle de nouvelles optimisations de performance ont été apportées et des nouveautés telles que le nouvel opérateur logique de coalescence « ?? » (renvoie l'opérande de droite si l'opérande de gauche est NULL ou undefined, et vice versa), l'opérateur « ?. » pour vérifier toute la chaîne de propriétés ou d'appels simultanément (par exemple « db?.user?.name?.length » sans vérifications préalables), et la méthode Intl.DisplayName pour obtenir des noms localisés, etc.
  • Une révision de l'API Streams a été effectuée, visant à améliorer la cohérence des interfaces des API Streams et à éliminer les différences de comportement des composants fondamentaux de Node.js. Par exemple, le comportement de http.OutgoingMessage a été rapproché de stream.Writable, et net.Socket de stream.Duplex. L'option autoDestroy est par défaut réglée sur « true », impliquant l'appel de « _destroy » à la fin.
  • Un support expérimental pour l'API WASI (WebAssembly System Interface), fournissant des interfaces de programmation pour une interaction directe avec le système d'exploitation (API POSIX pour travailler avec des fichiers, des sockets, etc.).
  • Les exigences ont été augmentées pour les versions minimales des compilateurs et des plateformes : macOS 10.13 (High Sierra), GCC 6, Windows version 7/2008 R2 ou plus récent.

Rappelons que la plateforme Node.js peut être utilisée à la fois pour le soutien serveur des applications Web et pour créer des programmes réseau clients et serveurs classiques. Pour étendre la fonctionnalité des applications Node.js, une grande collection de modules, dans laquelle vous pouvez trouver des modules pour l'implémentation de serveurs et de 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 aux bases de données (MySQL, PostgreSQL, SQLite, MongoDB), des moteurs de template, des moteurs CSS, des implémentations d'algorithmes crypto et des systèmes d'authentification (OAuth), des parseurs XML.

Pour gérer un grand nombre de requêtes parallèles, Node.js utilise un modèle asynchrone d'exécution de code, basé sur le traitement d'événements de manière non bloquante et la définition de gestionnaires de callback. En tant que méthodes de multiplexage des connexions, des techniques telles que epoll, kqueue, /dev/poll et select sont prises en charge. La bibliothèque utilisée pour le multiplexage des connexions est libuv, qui est une surcouche de libev dans les systèmes Unix et sur IOCP sous Windows. Pour créer un pool de threads (thread pool), la bibliothèque libeio, pour effectuer des requêtes DNS en mode non bloquant, est intégrée avec c-ares. Tous les appels système qui entraînent un blocage sont exécutés à l'intérieur du pool de threads et ensuite, tout comme les gestionnaires de signaux, ils transmettent le résultat de leur travail via un canal anonyme (pipe). L'exécution du code JavaScript est assurée grâce à l'utilisation du moteur développé par Google, V8 (en plus, Microsoft développe une variante de Node.js avec le moteur Chakra-Core).

Essentiellement, Node.js ressemble aux frameworks Perl AnyEvent, Ruby Event Machine, Python Twisted et l'implémentation Dans Tcl, il y a des événements, mais la boucle de traitement des événements (event loop) dans Node.js est cachée aux développeurs et ressemble à la gestion 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 spécificité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 pour ensuite traiter les 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) { обработка результата }); », où le contrôle revient immédiatement au code suivant, tandis que les résultats de la requête sont traités au fur et à mesure de la réception des données.

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