Le runtime open source Napa.js de Microsoft ajoute le multithreading à Node.js
Pour la performance des applications JS à forte intensité de calculs

Le , par Michael Guilloux, Chroniqueur Actualités
Microsoft veut apporter à la célèbre plateforme JavaScript côté serveur Node.js des performances de type C++, notamment pour les applications à forte intensité de calculs. Il faut en effet noter que si C++ est conçu pour simplifier la tâche aux ordinateurs, afin d'atteindre des niveaux de performance plus élevés, JavaScript est prêt à sacrifier certaines performances afin de faciliter la tâche aux programmeurs. Pour des logiciels dont des performances très élevées sont nécessaires (par exemple, si vous construisez un moteur de jeu ou si vous devez effectuer des opérations complexes sur un matériel limité, tel que des systèmes embarqués), C++ sera donc un choix évident. Mais cela pourrait être possible avec Node.js et Microsoft mise sur Napa.js.

D'après Microsoft, Napa.js fournit un modèle de programmation JavaScript multithread qui permet aux développeurs d'écrire du code JavaScript intensif en calculs, sans bloquer la boucle d'événement (event loop) de Node. Il devrait être utilisé pour les programmes à forte intensité de calculs ou pour les workflows complexes pouvant nécessiter une exécution parallèle de code JavaScript. Napa.js est un runtime JavaScript multithread basé sur V8, le moteur JavaScript libre et open source développé par Google, et qui est notamment utilisé dans les navigateurs Chromium et Google Chrome, ainsi que sur la plateforme Node.js.

Napa.js a été conçu à l'origine pour développer des services hautement itératifs avec des performances non compromises dans Bing. Et après deux ans d'utilisation, Microsoft a estimé que ce modèle fonctionne bien et l'a trouvé utile pour étendre Node.js à des tâches intensives en calculs.

« Bien que JavaScript soit déjà génial sans multithreading aujourd'hui, nous avons pensé qu'il pourrait être encore mieux si un large spectre d'utilisations CPU bound (à forte intensité de calcul) peut être pris en charge », explique Microsoft dans la FAQ sur le projet. « Napa.js vise à rendre cela possible, simplement parce que nous avons ces besoins et ils ne peuvent pas être satisfaits avec les solutions existantes. »

Il y avait beaucoup de défis, allant de l'API à la performance. En ce qui concerne l'API, Microsoft explique par exemple qu'il fallait fournir la capacité multithreading avec précaution sans compromettre la simplicité d'un thread unique de JavaScript. Et pour la performance, le géant du logiciel parle par exemple la gestion de la mémoire.

Napa est distribué comme module Node.js. Il peut être installé via NPM en tapant npm install napajs. Mais il peut aussi être intégré dans un processus hôte sans dépendance Node.js, en prenant également en charge les modules à la manière de Node. Ainsi, on peut penser qu'il pourrait être un concurrent de Node.js ; une question à laquelle Microsoft a répondu dans sa FAQ : « Non. Nous avons tant apprécié et bénéficié de Node.js, et nous avons apprécié son idée et son écosystème qui rend la construction de système backend beaucoup plus facile. Avec cette considération, au lieu de distribuer Napa.js en tant que runtime séparé, nous distribuons Napa.js en tant que module Node. C'est plus difficile, nous l'admettons, car nous devons prendre en charge plusieurs versions de Node, mais c'est plus sain pour l'écosystème. Aussi Napa.js se concentre sur des scénarios de calcul, de sorte que de nombreux modules de base dans Node comme http ne sont pas pris en charge par Napa. »

La fondation Node.js, qui supervise le développement de Node.js elle-même, considère Napa.js comme faisant partie de l'écosystème Node.js. Elle estime qu'il prend en charge un cas d'utilisation qui complète Node.js en fournissant un moyen d'exécuter des processus JavaScript multithread pour des cas d'utilisation à forte intensité de calculs.

Avec Nada.js, Microsoft a décidé d’adopter une approche consistant à prendre en charge les modules de base de Node uniquement lorsque cela est absolument nécessaire. C’est-à-dire quand ils sont également importants pour prendre en charge les scénarios de calcul, ou sont largement utilisés, ou que de nombreux modules importants de NPM ne peuvent fonctionner sans cela.

Napa est actuellement en développement, à sa version 0.1.0, mais il présente déjà des fonctionnalités telles que l'exécution JavaScript multithread et dispose d'une architecture de module compatible avec Node.js avec la prise en charge de NPM. Il offre également une API pour le transport d'objets, le partage d'objets et la synchronisation entre threads JavaScript, entre autres. Comme nous l'avons également mentionné, il est distribué en tant que module Node.js, mais supporte aussi des scénarios d'intégration dans des processus hôtes sans dépendance Node.

Dans sa feuille de route, Microsoft prévoit aussi des améliorations de performances qui passent entre autres par la réduction de l'impact du garbage collector sur la latence d'exécution. Il s'agira aussi de travailler sur la compatibilité Node, la coopération entre les threads JavaScript et le support d'un outil de débogage. Napa.js est open source et disponible sous licence MIT.

Sources : GitHub, FAQ Napa.js

Et vous ?

Qu’en pensez-vous ?
Napa.js pourrait-il être utile dans vos développements quotidiens ?

Voir aussi :

Node.js forké à nouveau pour donner naissance à Ayo, à cause des violations répétées du code de conduite du projet
Node.js 8 est disponible et apporte le moteur V8 en version 5.8, une mise à niveau du module expérimental async_hooks et bien d'autres améliorations


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de GilbertLatranche GilbertLatranche - Membre averti https://www.developpez.com
le 24/10/2017 à 22:06
Youpi, toujours plus loin.

J'attends avec impatience les sites statiques, de contenu style texte noir sur fond blanc, qui nécessiteront Napa.js.
Contacter le responsable de la rubrique Accueil