La version 16.0 de Node.js, une plateforme pour l'exĂ©cution d'applications rĂ©seau en JavaScript, a Ă©tĂ© publiĂ©e. Node.js 16.0 est classĂ© comme une version avec un support Ă long terme, mais ce statut ne sera attribuĂ© qu'en octobre, aprĂšs sa stabilisation. Le support de Node.js 16.0 sera assurĂ© jusqu'en avril 2023. Le soutien de l'ancienne version LTS de Node.js 14.0 se poursuivra jusqu'en avril 2023, tandis que l'ancienne version LTS 12.0 prendra fin en avril 2022. Le soutien de la version LTS 10.0 sera arrĂȘtĂ© dans 10 jours.
Améliorations principales :
- Le moteur V8 a été mis à jour vers la version 9.0 (la version 8.6 a été utilisée dans Node.js 15), ce qui a permis d'introduire dans Node.js 16 des fonctionnalités telles que la propriété 'indices' pour les expressions réguliÚres (incluant un tableau des positions de début et de fin des groupes de correspondances), la méthode Atomics.waitAsync (version asynchrone d'Atomics.wait), et le support de l'utilisation du mot-clé await dans les modules au niveau supérieur. L'appel des fonctions a été accéléré lorsque le nombre d'arguments passés ne correspond pas à ceux définis dans la fonction.
- L'API Timers Promises a été stabilisée, fournissant un ensemble alternatif de fonctions pour travailler avec des minuteries, retournant des objets Promise, ce qui évite d'utiliser util.promisify(). import { setTimeout } from 'timers/promises'; async function run() { await setTimeout(5000); console.log('Hello, World!'); } run();
- Une implémentation expérimentale de l'API Web Crypto a été ajoutée, destinée à effectuer des opérations cryptographiques de base cÎté applications web, telles que la manipulation de hachages cryptographiques, la génération et la vérification de signatures numériques, le codage et le décodage de données utilisant diverses méthodes de chiffrement, ainsi que la génération de nombres aléatoires cryptographiquement fiables. L'API comprend également des fonctions pour générer et gérer des clés.
- N-API (API pour le développement d'extensions) a été mis à jour vers la version 8.
- Le passage à une nouvelle version du gestionnaire de paquets NPM 7.10 a été effectué.
- La mise en Ćuvre de la classe AbortController, basĂ©e sur le Web API AbortController, qui permet d'annuler des signaux dans les API basĂ©s sur Promise, a Ă©tĂ© stabilisĂ©e.
- Le support de la troisiÚme version du format Source Map, utilisé pour le mappage des modules générés, traités ou empaquetés avec le code source original, a été stabilisé.
- Pour assurer la compatibilité avec les anciennes API Web, les méthodes buffer.atob(data) et buffer.btoa(data) ont été ajoutées.
- La création de builds pour les nouveaux appareils Apple équipés de la puce ARM M1 a commencé.
- Sur la plateforme Linux, les exigences concernant la version du compilateur ont été relevées à GCC 8.3.
Rappelons que la plateforme Node.js peut ĂȘtre utilisĂ©e tant pour le support serveur des applications Web que pour la crĂ©ation de programmes rĂ©seau classiques cĂŽtĂ© client et serveur. Pour Ă©tendre les fonctionnalitĂ©s des applications Node.js, une vaste collection de modules a Ă©tĂ© prĂ©parĂ©e, dans laquelle on peut trouver des modules avec des implĂ©mentations 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.
Il convient également de noter que la société Deno, fondée par le créateur de Node.js pour le développement de la nouvelle plateforme Deno, a reçu un investissement de 4,9 millions de dollars. Par sa nature, Deno est similaire à Node.js, mais tente de corriger les erreurs conceptuelles commises dans l'architecture de Node.js et d'offrir aux utilisateurs un environnement plus sécurisé. Il est signalé que les solutions commerciales de Deno seront basées sur des produits entiÚrement ouverts, et le modÚle Open Core avec une fonctionnalité payante distincte est perçu comme inacceptable pour la plateforme Deno.
Source : opennet.ru
