asm.js s'approche des performances du code natif C/C++
Mozilla optimise son sous-ensemble de JavaScript

Le , par Hinault Romaric, Responsable .NET
JavaScript jouit d’une grande popularité. Le langage de script est devenu une plateforme incontournable pour le Web.

Cependant, il souffre de quelques faiblesses, notamment ses performances par rapport aux langages de développement d’applications natives.

Pour pallier à cela, Mozilla a développé asm.js, un sous-ensemble de JavaScript, dont le but est de maximiser les performances du langage de script pour le Web.

D’après la description de Mozilla, asm.js est – purement - du code JavaScript « spécialement conçu », qui est compilé en langage natif C/C++ avec emscripten avant exécution. Avec asm.js, les développeurs peuvent écrire du code C/C++ et l’exécuter dans le navigateur grâce à emscripten.

Initialement, le code asm.js exécuté avec un navigateur standard comme Chrome pouvait être dix fois plus lent que du code natif. Grâce à des optimisations, la fondation Mozilla avait réussi à rendre le code asm.js environ trois fois plus lent que du code natif en février, et deux fois plus lent en juin.

L’organisme ne s’est pas arrêté en si bon chemin, et dévoile aujourd’hui les nouvelles performances de sa solution. Grâce à des changements apportés à la façon dont les virgules flottantes sont manipulées, asm.js est désormais au pire lent de 1,5 fois par rapport au natif.


asm.js pour fonctionner dans un navigateur nécessite un support explicite du moteur JavaScript. Depuis Firefox 22, Mozilla a activé le support de asm.js dans son moteur SpiderMonkey.

Source : Mozilla

Et vous ?

Que pensez-vous de asm.js ?


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


 Poster une réponse

Avatar de Francis Walter Francis Walter - Expert éminent sénior https://www.developpez.com
le 24/12/2013 à 8:25
moi je dis juste qu'avec le temps, Mozilla reussira a reduire la lenteur a 0 avec un peu plis d'efforts.
Avatar de jojosbiz jojosbiz - Membre régulier https://www.developpez.com
le 24/12/2013 à 9:12
Pas compris du tout l’intérêt de tout ça.

Quelqu'un est-il capable de me l'expliquer ?
Avatar de Uther Uther - Expert éminent https://www.developpez.com
le 24/12/2013 à 9:38
Citation Envoyé par Hinault Romaric
D’après la description de Mozilla, asm.js est – purement - du code JavaScript « spécialement conçu », qui est compilé en langage natif C/C++ avec emscripten avant exécution. Avec asm.js, les développeurs peuvent écrire du code C/C++ et l’exécuter dans le navigateur grâce à emscripten.

En fait c'est tout le contraire.
Le code asm.js n'est pas compilé en C/C++, mais directement en code machine et enscriptem ne permet pas du tout d'exécuter du javascript.

C'est le code C/C++ qui est compilé via enscriptem en code javascript simplifié(asm.js). Cette opération est faite par le développeur qui intègrera le code généra sur son site, pas par le navigateur.
Ce code javascript pourra donc etre chargé et executé de manière efficace par tous les navigateurs. Cependant sur les navigateurs optimisés pour le asm.js, il est compilé en code machine en AOT (en une seule fois contrairement au JIT qui est compilé a la volée) ce qui permet des performances proches du natif.

Citation Envoyé par Faridsarl
moi je dis juste qu'avec le temps, Mozilla reussira a reduire la lenteur a 0 avec un peu plis d'efforts.

0 surcout, certainement pas. Il restera des choses que le JS même limité ne pourra jamais faire aussi vite que du natif. De plus la phase de compilation JS -> natif coûte quand même un peu de temps par rapport a du déjà pré-compilé. Mais descendre au pire à 1.5x la vitesse du natif est déjà un excellent point.
S'il arrivaient à descendre à 1.2x, ça serait déjà énorme.
Citation Envoyé par jojosbiz
Pas compris du tout l’intérêt de tout ça.

Quelqu'un est-il capable de me l'expliquer ?

Il y a pas mal d’intérêts, notamment:
- Pouvoir faire des applications web efficace avec des performances proches du natif.
- Pouvoir développer des applications web avec des langages plus structurés que le Javascript
- Pouvoir réutiliser facilement les nombreux code C/C++ utilisés dans les application bureau pour des applications web
Avatar de Skull57 Skull57 - Membre à l'essai https://www.developpez.com
le 24/12/2013 à 9:41
Pas compris du tout l’intérêt de tout ça.

Quelqu'un est-il capable de me l'expliquer ?

En fait, les applications natives sont celles que tu installes sur l'ordinateur. On espère donc avoir les mêmes performances sur une application web que sur une application bureau.

Un cas concret: Si un jeu tourne à 60FPS sur ton PC, alors, comme c'est sensé être 1.5x plus lent sur le web, le jeu est sensé tourner à 60/1.5=40FPS si tu y joues en HTML5 avec asm.js.

Après, faut voir à quels domaines ça s'applique. Les jeux-vidéos genre crysis envoie du code assembleur directement à la carte graphique, faut voir si le HTML5 permet de telles optimisations... (+ tout ce qui est utilisation/modification du pipeline graphique, mais comme j'ai jamais touché)
Avatar de jojosbiz jojosbiz - Membre régulier https://www.developpez.com
le 24/12/2013 à 9:50
Oué, c'est bien ce que je pensai..

On en revient à essayer de faire entrer un triangle dans un rond avec un marteau tout en se persuadant que le triangle finira bien par devenir un rond...
Avatar de dk dk - Membre actif https://www.developpez.com
le 24/12/2013 à 10:19
Que pensez-vous de asm.js ?
Si tous les navigateurs le prennent en charge aussi efficacement, ça va clairement devenir l'avenir du web, les gros atouts étant les performances et la génération à partir de c/c++ ; plus besoin de plugins et/ou machine virtuelle également, donc moins de problèmes de sécurité tout en restant multisupport.
Avatar de renoo renoo - Membre éprouvé https://www.developpez.com
le 24/12/2013 à 11:10
juste une petite remarque emscripten ça permet de compiler du code c/c++ en javascript normal ou en asm.js. les perfs sont meilleurs avec asm.js sous firefox.

Par ailleurs asm.js est un sous ensemble de js ; donc ca marche sur tout les navigateurs mais ca va très vite que sur firefox.
Avatar de tralloc tralloc - Membre actif https://www.developpez.com
le 24/12/2013 à 15:32
J'aimerais bien voir des exemples. Ca a l'air très bien.
@Uther pour une fois je n'ai pas compris toutes tes explications.

Si j'ai bien compris : On code en C ou en C++ puis on le compile.
Ensuite qu'est ce qui se passe ?

Comment on intègre ça dans le code ? Comment fais-t-on le lien dans la page html ? On le fait sur le code C compilé (genre dll), ou sur un JS qui passe à la moulinette le code compilé (version simplifiée) généré par le fameux asm.js ?

Ca fait penser à dart. Je me trompe ?

Ensuite comment fais-ton pour accéder aux ressources de la page ?
J'aimerais aussi savoir si on peut coupler ça avec des frameworks comme angularjs
Avatar de DonQuiche DonQuiche - Expert confirmé https://www.developpez.com
le 24/12/2013 à 16:14
Pour moi l'avenir du web passe soit par asm.js soit par NaCl parce que ce sont les deux solutions significatives qui pourraient nous permettre d'utiliser les langages de notre choix avec des performances natives. On n'a pas besoin d'un langage de plus mais d'une solution neutre comme celles-ci.

Petite préférence tout de même pour NaCl, le poids du code asm.js semble énorme, même compressé.

Citation Envoyé par tralloc  Voir le message
Si j'ai bien compris : On code en C ou en C++ puis on le compile. Ensuite qu'est ce qui se passe ?

Tu codes en ce que tu veux et un code javascript est généré. Ce code javascript est licite, 100% compatible mais "bizarre" avec des choses telles que "x|0" ou l'appel à des fonctions "var" ou "box2b" ressemblant à des instructions bytecode.

Ce code tourne sur un navigateur ne supportant pas asm.js. Toutefois, un navigateur asm.js reconnaît que "x|0" contraint x à être un entier, et interprétera box2b et var comme étant des opcodes plutôt que d'appeler ces fonctions. Au final ce code javascript peut facilement être vérifié, être fortement et statiquement typé et être finalement compilé en un code natif très rapide.

Ca fait penser à dart. Je me trompe ?

Dart est un nouveau langage. Asm.js est un bytecode neutre, que l'on peut efficacement utiliser comme cible de compilation pour à peu près n'importe quel langage.

J'aimerais aussi savoir si on peut coupler ça avec des frameworks comme angularjs

Le gros avantage de asm.js est qu'il est prévu pour facilement faire interagir les fonctions javascript avec le code asm.js.
Avatar de tralloc tralloc - Membre actif https://www.developpez.com
le 24/12/2013 à 18:13
Merci Don Quiche.
Ca éclaire un peu ma lanterne.
Je me réjouis de l'interopérabilité du projet.

Il manquera maintenant un IDE bien béton faisant correctement le lien entre les pages html et le code C ou autre (avec de la vérification d'erreurs, autocomplétion selon les resources des pages...). Ca risque d'être long à venir...

A moins que l'idée soit plutôt de créer des bibliothèques de fonctions lourdes à intégrer dans un js classique
Offres d'emploi IT
- Ile de France - (78946)
Chef de Projet Infrastructure H/F
Centre de Service Sogeti - Midi Pyrénées - Toulouse (31000)
Centre de Service Sogeti - Aquitaine - Bordeaux (33000)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil