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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

asm.js s’approche des performances du code natif C/C++


Sujet :

JavaScript

  1. #1
    Rédacteur
    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut asm.js s’approche des performances du code natif C/C++
    asm.js s’approche des performances du code natif C/C++
    Mozilla optimise son sous-ensemble de JavaScript

    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 ?

  2. #2
    Expert éminent sénior

    Avatar de Francis Walter
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 2 315
    Points : 26 889
    Points
    26 889
    Par défaut
    moi je dis juste qu'avec le temps, Mozilla reussira a reduire la lenteur a 0 avec un peu plis d'efforts.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 130
    Points : 127
    Points
    127
    Par défaut
    Pas compris du tout l’intérêt de tout ça.

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

  4. #4
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 632
    Points : 15 829
    Points
    15 829
    Par défaut
    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

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    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é)

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 130
    Points : 127
    Points
    127
    Par défaut
    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...

  7. #7
    dk
    dk est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 75
    Points : 238
    Points
    238
    Par défaut
    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.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 307
    Points : 983
    Points
    983
    Par défaut
    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.

  9. #9
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2006
    Messages : 380
    Points : 314
    Points
    314
    Par défaut
    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

  10. #10
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 493
    Points
    5 493
    Par défaut
    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.

  11. #11
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2006
    Messages : 380
    Points : 314
    Points
    314
    Par défaut
    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

  12. #12
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 632
    Points : 15 829
    Points
    15 829
    Par défaut
    Citation Envoyé par jojosbiz Voir le message
    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...
    En effet, mais il faut voir qu'on a pas le choix, JavaScript étant le seul langage nativement reconnu par tous les navigateurs. L'idéal aurait été un bytecode standardisé, malheureusement ça n'est pas prêt d'arriver.

    Citation Envoyé par dk Voir le message
    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.
    Ca semble bien parti : même si les développeurs de Chrome se refusent de considérer asm.js en tant que vrai sous langage de JavaScript, ils ont introduit dans webkit des optimisations spécifiques a emscripten qui font qu'au final le code qui suit les règles de asm.js bénéficie de ses optimisations.

    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 ?
    A la base emscripten est un backend LLVM qui génère du JavaScript. Cela signifie qu'il permet de compiler en JavaScript tous les langages qui on un frontend LLVM (le plus connu étant étant Clang pour le C/C++).

    Donc pour l'intégration c'est le développeur qui compile son code C/C++/D/... en JavaScript une fois pour toute et l’ajoute dans son site. Le navigateur du client l’exécutera comme n'importe quel JavaScript, avec des optimisations si il le supporte.

    Citation Envoyé par tralloc Voir le message
    Ça fait penser à dart. Je me trompe ?
    Les objectifs sont en effet assez semblable : de meilleures performances et pouvoir utiliser des langages plus stricts.

    Les moyens sont différents : Dart est un nouveau langage, la où Mozilla propose de choisir son langage qui sera compilé en un JavaScript très optimisable.

    Citation Envoyé par tralloc Voir le message
    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
    je ne connais angular.js que de nom mais comme asm.js permet de faire des fonctions pont entre le code compilé et le JavaScript classique, je suppose que ça doit être possible.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 57
    Points : 66
    Points
    66
    Par défaut
    Petite préférence tout de même pour NaCl, le poids du code asm.js semble énorme, même compressé.
    Mais entre le HTML et NaCl, il y a JS qui effectue le lien. Donc on est toujours contraint d'utiliser du JS, m'a déception concernant cette technologie.

    De plus, NaCl est du code compilé. Un comparatif intéressant serait avec PNaCl, qui comme du asm.js, est destiné à être compilé par le navigateur en code natif.

Discussions similaires

  1. optimisation des performances du code PHP
    Par nguim dans le forum Langage
    Réponses: 2
    Dernier message: 22/02/2014, 14h48
  2. Compiler des .class en code natif
    Par Mobius dans le forum Général Java
    Réponses: 21
    Dernier message: 25/01/2011, 14h10
  3. Performances: Code Natif / Managé
    Par TotorLeCastor dans le forum C++/CLI
    Réponses: 4
    Dernier message: 21/02/2008, 17h53
  4. [VB6] Datagrid afficher ou cacher des colonnes par code
    Par soazig dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 06/02/2003, 18h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo