IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

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

70PARTAGES

10  0 
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

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de blbird
Membre chevronné https://www.developpez.com
Le 07/02/2018 à 16:09
Quel est l'intérêt de cette réponse? Une nouvelle technologie qui, utilisée normalement, pourrait bien permettre d'améliorer sensiblement la rapidité d'exécution du code JS sur nos processeurs multi-cœurs est décrite.

Et la seule chose que tu nous dis, c'est que mal utilisée (comme toute autre technologie), cela pourrait être moins bien? Oui, et?

Je te propose de nous montrer des exemples comment bien utiliser les technologies Web, plutôt que de critiquer les développeurs que tu trouves moins bons que toi.
0  0 
Avatar de 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.
0  3