Apple utilisera LLVM pour accélérer le JavaScript dans Safari

Apple utilisera LLVM pour accélérer le JavaScript dans Safari

Après tout, pourquoi réinventer la roue ?

Avatar de l'auteur
Vincent Hermann

Publié dans

Logiciel

16/05/2014 4 minutes
60

Apple utilisera LLVM pour accélérer le JavaScript dans Safari

Apple travaille actuellement sur l’utilisation du compilateur LLVM pour Safari. Cela devrait permettre à terme une hausse assez importante des performances du JavaScript, mais pas nécessairement dans tous les cas. Explications.

safari webkit

JavaScript : une exécution en fonction du contexte 

Le JavaScript est devenu un composant essentiel du web moderne depuis plusieurs années. Il est au cœur du renouveau des sites car il permet de créer de très nombreuses actions automatisées et dynamiques, les développeurs pouvant offrir à leurs pages des comportements proches de ce que l’on peut trouver dans des logiciels. Comme tout langage de script, il est d’abord interprété, mais peut bénéficier d’autres prises en charge, notamment à travers la compilation.

 

L’objectif de cette compilation est simple : augmenter les performances. Il en existe cependant plusieurs types, adaptés à des situations différentes. Tous les navigateurs possèdent par exemple un compilateur JIT (Just-in Time) pour produire un code exécutable. Ce dernier est plus rapide mais nécessite un peu de temps pour être produit. Dans le cas du moteur WebKit équipant Safari (versions classique et mobile), il ne s’active que pour des fonctions appelées au moins 6 fois ou reprises 100 fois dans une boucle. Le code produit est environ 10 fois plus performant que l’interprété.

 

Mais, toujours dans le cas de WebKit, une fonction peut être appelée beaucoup plus souvent et être envoyée vers un autre type de compilation JIT. Il faut que ladite fonction soit appelée plus de 66 fois ou répétée plus de 1 000 dans une boucle. Cette compilation prend plus de temps et produit un code exécutable environ 3 fois plus performant que le précédent, donc 30 fois plus rapide que le code interprété.

Un quatrième mode passant par LLVM 

Dans un billet explicatif, les développeurs de WebKit précisent cependant deux éléments importants. D’une part, l’optimisation continuelle du code vise à produire des performances aussi proches que possibles de ce que produit du C++ ou de l’Objective-C. D’autre part, plus les travaux avançaient sur la compilation au sein de WebKit, plus les développeurs se rendaient compte qu’ils réinventaient la roue.

 

L’idée est donc simple : déverrouiller un quatrième palier et utiliser le compilateur de LLVM. Ce dernier est plus lent mais son objectif est de produire un code particulièrement optimisé, pas de compiler rapidement. Les résultats attendus dans ce mode, nommée FTL (Fourth Tier LLVM), sont de l’ordre de 40 fois les performances du code interprété. Cependant, puisque le travail de compilation est plus long, il est réservé aux fonctions nécessitant plus de 10 millisecondes pour être exécutées ou appelées un nombre exceptionnel de fois.

 

Outre l’amélioration des performances que ces travaux amèneront à terme, il est intéressant de constater comment l’utilisation d’un compilateur peut continuer à accélérer la convergence entre le web et le natif. LLVM est en effet avant tout une plateforme de compilation dédié au C, au C++ et à l’Objective-C. Elle est largement utilisée depuis plusieurs années par Apple pour le développement des applications sous OS X et iOS. Son intégration dans WebKit renforce encore l’intérêt du JavaScript pour les développeurs.

Toujours plus de convergence 

On notera cependant que si Apple travaille sur un tel projet, il y a de fortes chances que les concurrents aient des améliorations similaires dans leurs cartons. La vitesse d’exécution du JavaScript est en effet un élément primordial de comparaison car elle participe très largement aux performances générales du navigateur. Or, cette sensation de « légèreté » est devenue pour beaucoup le premier critère de choix, avant même les fonctionnalités et surtout la sécurité. Microsoft et Google n’ont donc sans doute pas dit leur dernier mot.

 

Ceux qui souhaitent tester la dernière révision de WebKit pourront se tourner vers les Nightly Builds. Attention cependant, elles ne sont disponibles que sous la forme de sources et de binaires pour OS X. Par ailleurs, elles peuvent se montrer très instables mais n’écrasent aucun composant stable (Safari reste à sa place).

Écrit par Vincent Hermann

Tiens, en parlant de ça :

Sommaire de l'article

Introduction

JavaScript : une exécution en fonction du contexte 

Un quatrième mode passant par LLVM 

Toujours plus de convergence 

Fermer

Commentaires (60)




On notera cependant que si Apple travaille sur un tel projet, il y a de fortes chances que les concurrents aient des améliorations similaires dans leurs cartons.





Je dirais plus qu’il essaie de rattraper leur retard sur les autres.


Ca serait génial si on pouvait avoir un test de la part de NXI comparant les différents navigateurs à l’instar de celui qu’on a eu pour comparer les messageries.








zefling a écrit :



Je dirais plus qu’il essaie de rattraper leur retard sur les autres.







Il y a des navigateurs qui le font déjà ? (vraie question)









zefling a écrit :



Je dirais plus qu’il essaie de rattraper leur retard sur les autres.





Google contribue autant si ce n’est plus qu’Apple à LLVM.









lincruste_2_la vengeance a écrit :



Google contribue autant si ce n’est plus qu’Apple à LLVM.





Heureusement que Google est là <img data-src=" /><img data-src=" />





Le monde sans Google ce serait un peu comme la terre sans Bruce Willis<img data-src=" /><img data-src=" />









Network a écrit :



Il y a des navigateurs qui le font déjà ? (vraie question)







J’avoue que c’est devenu tellement compliqué que j’en sais rien. Déjà ils ont ajouter asm.js et des trucs de genres… Safari était sacrement à la traine.



Mozilla a un petit comparatif :http://arewefastyet.com/ (Il y a beaucoup de graphs, c’est pas forcement facile de ce faire une idée)









zefling a écrit :



J’avoue que c’est devenu tellement compliqué que j’en sais rien. Déjà ils ont ajouter asm.js et des trucs de genres… Safari était sacrement à la traine.



Mozilla a un petit comparatif :http://arewefastyet.com/ (Il y a beaucoup de graphs, c’est pas forcement facile de ce faire une idée)







Et l’est toujours, c’est dommage car bien intégré au sein de OSX.









misterB a écrit :



Heureusement que Google est là <img data-src=" /><img data-src=" />





Le monde sans Google ce serait un peu comme la terre sans Bruce Willis<img data-src=" /><img data-src=" />





Ouiiii c’est exactement ce que j’ai dit, heureusement que tu es là pour me paraphraser et tout merci comme ça tout le monde comprend <img data-src=" />.









misterB a écrit :



Le monde sans Google ce serait un peu comme la terre sans Bruce Willis<img data-src=" /><img data-src=" />







Fait gaffe c’est le genre d’analogie qui peut sacrement être détournée. <img data-src=" />









lincruste_2_la vengeance a écrit :



Google contribue autant si ce n’est plus qu’Apple à LLVM.









lincruste_2_la vengeance a écrit :



Ouiiii c’est exactement ce que j’ai dit, heureusement que tu es là pour me paraphraser et tout merci comme ça tout le monde comprend <img data-src=" />.







Je pense qu’il se demande juste ce que vient faire un commentaire sur la comparaison entre les contributions de google et d’apple à LLVM, dans une news qui dit juste qu’apple compte l’integrer dans Safari.

L’article ne traite pas de la provenance de LLVM.









Network a écrit :



Je pense qu’il se demande juste ce que vient faire un commentaire sur la comparaison entre les contributions de google et d’apple à LLVM, dans une news qui dit juste qu’apple compte l’integrer dans Safari.

L’article ne traite pas de la provenance de LLVM.





C’est vrai









misterB a écrit :



Heureusement que Google est là <img data-src=" /><img data-src=" />





Le monde sans Google ce serait un peu comme la terre sans Bruce Willis<img data-src=" /><img data-src=" />





<img data-src=" /> Bruce Willis est mort dans Armageddon<img data-src=" />









Network a écrit :



Je pense qu’il se demande juste ce que vient faire un commentaire sur la comparaison entre les contributions de google et d’apple à LLVM, dans une news qui dit juste qu’apple compte l’integrer dans Safari.





Peut être le fait que c’est Dredi?<img data-src=" />









Alucard63 a écrit :



Peut être le fait que c’est Dredi?<img data-src=" />







Arf, je suis un gros rabat-joie alors ?

<img data-src=" />









illidanPowa a écrit :



<img data-src=" /> Bruce Willis est mort dans Armageddon<img data-src=" />





NOOOOOOOOON <img data-src=" /><img data-src=" />









illidanPowa a écrit :



<img data-src=" /> Bruce Willis est mort dans Armageddon<img data-src=" />







Tu viens de spoiler la fin d’un film que tout le monde à vu. <img data-src=" />









zefling a écrit :



Tu viens de spoiler la fin d’un film que tout le monde à vu. <img data-src=" />





Moi je l’ai pas vu.<img data-src=" />









illidanPowa a écrit :



<img data-src=" /> Bruce Willis est mort dans Armageddon<img data-src=" />





Ah ben, puisque c’est la journée des spoils, à la fin de Terminator 2, Schwarzy, il se prend un méchant coup de chaud <img data-src=" /> <img data-src=" />









Alucard63 a écrit :



Moi je l’ai pas vu.<img data-src=" />





Bof, t’as rien loupé.



C’est l’histoire d’un astéroïde, Bruce Willis va dessus, et BOUM l’astéroïde <img data-src=" />



En fait, c’est comme dans les plupart des films avec Bruce Willis<img data-src=" />









Jaskier a écrit :



Ah ben, puisque c’est la journée des spoils, à la fin de Terminator 2, Schwarzy, il se prend un méchant coup de chaud <img data-src=" /> <img data-src=" />





Ça c’est la grosse faille de conception des terminators, l’absence de water cooling <img data-src=" /><img data-src=" />





Remarque le model suivant était vraiment trop sensible au nitrogen <img data-src=" />





A se demander a quoi Skynet pensait avec ses Terminator………









misterB a écrit :



Remarque le model suivant était vraiment trop sensible au nitrogen <img data-src=" />







Anglicisme ! <img data-src=" />









zefling a écrit :



Tu viens de spoiler la fin d’un film que tout le monde à vu. <img data-src=" />





pas vu non plus.<img data-src=" />









Vincent_H a écrit :



Anglicisme ! <img data-src=" />





<img data-src=" /><img data-src=" /><img data-src=" />



pas fait on purpose <img data-src=" /><img data-src=" /><img data-src=" />









misterB a écrit :



A se demander a quoi Skynet pensait avec ses Terminator………





Justement, ça restera toujours une énigme. Parce que lorsque l’on voit le modèle d’après, c’est pas beaucoup mieux. Ca résiste pas à un hélico et à une explosion nucléaire <img data-src=" />









misterB a écrit :



<img data-src=" /><img data-src=" /><img data-src=" />



pas fait on purpose <img data-src=" /><img data-src=" /><img data-src=" />







Je… mais…. <img data-src=" /><img data-src=" /><img data-src=" /><img data-src=" />









misterB a écrit :



<img data-src=" /><img data-src=" /><img data-src=" />



pas fait on purpose <img data-src=" /><img data-src=" /><img data-src=" />





<img data-src=" />









Vincent_H a écrit :



Je… mais…. <img data-src=" /><img data-src=" /><img data-src=" /><img data-src=" />





Keep calm and carry on (with your sword <img data-src=" /> )<img data-src=" /><img data-src=" /><img data-src=" />









Jaskier a écrit :



Bof, t’as rien loupé.



C’est l’histoire d’un astéroïde, Bruce Willis va dessus, et BOUM l’astéroïde <img data-src=" />



En fait, c’est comme dans les plupart des films avec Bruce Willis<img data-src=" />





Ok.<img data-src=" />









Alucard63 a écrit :



Moi je l’ai pas vu.<img data-src=" />









guildem a écrit :



pas vu non plus.<img data-src=" />







Aucune culture du navet… Vous faites pousser quoi ? <img data-src=" />









Jaskier a écrit :



Bof, t’as rien loupé.



C’est l’histoire d’un astéroïde, Bruce Willis va dessus, et BOUM l’astéroïde <img data-src=" />



En fait, c’est comme dans les plupart des films avec Bruce Willis<img data-src=" />





sauf que dans la plupart des films de Bruce Willis, il meurt pas, sauf celui-là <img data-src=" />



On peut pas ban les spoilers là ???? <img data-src=" />








Cara62 a écrit :



On peut pas ban les spoilers là ???? <img data-src=" />







spoiler, c’est le mot anglais pour HS ? <img data-src=" />









Cara62 a écrit :



On peut pas ban les spoilers là ???? <img data-src=" />





Passé 15 ans on a le droit, si tu ne les a pas vu c’est que tu ne voulais pas les voir <img data-src=" /><img data-src=" />










misterB a écrit :



Passé 15 ans on a le droit, si tu ne les a pas vu c’est que tu ne voulais pas les voir <img data-src=" /><img data-src=" />







Je suis encore jeune. <img data-src=" />









zefling a écrit :



Aucune culture du navet… Vous faites pousser quoi ? <img data-src=" />





que des choses autorisées monsieur le juge !









Cara62 a écrit :



On peut pas ban les spoilers là ???? <img data-src=" />





<img data-src=" /> Armageddon a 10 ans <img data-src=" /> pis bon c’est pas le scénario qui fait le film l’histoire est moisie, ce qui claque c’est que tu en prends plein les mirettes.



c’est comme dire que je te spoile la fin de titanic.









Cara62 a écrit :



Je suis encore jeune. <img data-src=" />







C’est bizarre, j’ai dû mal à te croire. <img data-src=" />









zefling a écrit :



C’est bizarre, j’ai dû mal à te croire. <img data-src=" />







Ah bon pourquoi ? <img data-src=" />







illidanPowa a écrit :



<img data-src=" /> Armageddon a 10 ans <img data-src=" /> pis bon c’est pas le scénario qui fait le film l’histoire est moisie, ce qui claque c’est que tu en prends plein les mirettes.



c’est comme dire que je te spoile la fin de titanic.







Il se passe quoi à la fin de Titanic ? <img data-src=" />









illidanPowa a écrit :



c’est comme dire que je te spoile la fin de titanic.





HA TU SPOILES PAS HEIN ! je l’ai toujours pas vu…









levhieu a écrit :



spoiler, c’est le mot anglais pour HS ? <img data-src=" />





Euh non, je crois que c’est l’aileron que l’on place généralement à l’arrière des voitures pour qu’elles tiennent mieux à la route sur les voitures de courses.



C’est aussi un accessoire “indispensable” pour tout Jacky qui se respecte, surtout pendant la période amoureuse <img data-src=" />









zefling a écrit :



Déjà ils ont ajouter asm.js et des trucs de genres… Safari était sacrement à la traine.







asm.js (Mozilla) ne rend pas le code JavaScript existant plus rapide (ce que veut obtenir Apple avec LLVM).

asm.js est un sous-ensemble de JavaScript qui permet d’exécuter du code C/C++ plus rapidement dans le navigateur que si celui-ci avait été transpilé vers du code JavaScript classique. On écrit pas du code asm.js à la main (en tout cas c’est pas fait pour).



=&gt; donc rien à voir









Cara62 a écrit :



Ah bon pourquoi ? <img data-src=" />







Il se passe quoi à la fin de Titanic ? <img data-src=" />





Je vais faire mieux, je vais te raconter le film. Y’a pas grand chose à en dire.



C’est l’histoire d’un bateau. Il rencontre un Iceberg et PLOUF le bateau <img data-src=" />









guildem a écrit :



HA TU SPOILES PAS HEIN ! je l’ai toujours pas vu…





Lequel ? Parce que bon, on a au moins:






Ce qui est paradoxal, c’est qu’on utilise de plus en plus un langage qui peut être désactivé dans le navigateur <img data-src=" />








tanguy_k a écrit :



asm.js (Mozilla) ne rend pas le code JavaScript existant plus rapide (ce que veut obtenir Apple avec LLVM).

asm.js est un sous-ensemble de JavaScript qui permet d’exécuter du code C/C++ plus rapidement dans le navigateur que si celui-ci avait été transpilé vers du code JavaScript classique. On écrit pas du code asm.js à la main (en tout cas c’est pas fait pour).

=&gt; donc rien à voir





Pas tout à fait vrai.



Le code ASM.JS est généré (ou alors on aime se faire mal), et Firefox l’identifie et l’optimise autrement. C’est pour cela que les codes asm.js sont si performant sous Firefox.



Mais ça reste du javascript pour que tous les navigateurs puissent l’exécuter.



Dans tous les cas, quelque soit le navigateur, il y a du JIT pour le javascript. Mais la guerre ne se passe plus trop sur le JIT, mais sur Javascript en lui-même:





  • Firefox pousse à compléter Javascript pour en faire des “sur-versions” qui sont moins souples (obligation de déclarer les variables par exemple en Ecmascript 1.5), ou qui ajoutent des fonctionnalités qui sont émulées en Javascript pur et optimisées sur leur moteur (exemple: instructions parallélisées sous Firefox nightly avec SIMD.js).

    Le code Javascript produit en ASM.js est quasi illisible, ce qui permet de mettre en avant leur solution pour distribuer des produits commerciaux sans distribuer le code source.

  • Google pousse PNacl, qui est le retour du bytecode: on compile pour une machine qui n’existe pas, le navigateur compile pour la machine sur laquelle il faut exécuter le code. Là aussi il y a de la LLVM. L’avantage est de ne pas distribuer le code source des programmes, ça plaît aux éditeurs. Ca revient aussi à pouvoir utiliser d’autres langages facilement, tout en bénéficiant du meilleur de la techno disponibles: vrai multithreading (pas top en Javascript), type de données plus “machine” (pas d’entier en Javascript, tout est en virgule flottante 64bits bien fatiguante pour les petites config), SIMD, …

  • Microsoft la joue plus soft, en créant un langage qui compile en Javascript mais est plus maintenable







    Apple sur ce sujet me semble arriver après la guerre, et n’a rien entamé pour la prochaine bataille…









illidanPowa a écrit :



<img data-src=" /> Bruce Willis est mort dans Armageddon<img data-src=" />





Ce film, c’est 4 enterrements et un mariage.









Jaskier a écrit :



Lequel ? Parce que bon, on a au moins:












Alucard63 a écrit :



Moi je l’ai pas vu.<img data-src=" />













Jaskier a écrit :



Bof, t’as rien loupé.



C’est l’histoire d’un astéroïde, Bruce Willis va dessus, et BOUM l’astéroïde <img data-src=" />



En fait, c’est comme dans les plupart des films avec Bruce Willis<img data-src=" />







C’était quand même un très bon film à l’époque..!!

‘fin c’était jolie à regarder <img data-src=" />









brice.wernet a écrit :



Pas tout à fait vrai





C’est pas parceque tu complètes mes propos que ceci sont faux hein :)







brice.wernet a écrit :





  • Firefox Mozilla et les autres pousse(nt) à compléter Javascript pour en faire des “sur-versions” mal dit qui sont moins souples (obligation de déclarer les variables par exemple en Ecmascript 1.5 6), ou qui ajoutent des fonctionnalités qui sont émulées en Javascript pur comprends pas et optimisées sur leur moteur (exemple: instructions parallélisées sous Firefox nightly avec SIMD.js).

    Le code Javascript produit en ASM.js est quasi illisible, ce qui permet de mettre en avant leur solution pour distribuer des produits commerciaux sans distribuer le code source.C’est pas la raison d’être de asm.js

  • Google pousse PNacl

  • Microsoft la joue plus soft, en créant un langage qui compile en Javascript mais est plus maintenable L’un n’empeche pas l’autre : asm.js/NaCl vs TypeScript vs Dart sont toutes des approches differentes







    Apple sur ce sujet me semble arriver après la guerre, et n’a rien entamé pour la prochaine bataille…







    Désolé mais voici une belle liste d’amalgames, de trucs incompris, de confusions et en plus mal rédigé.









guildem a écrit :



quoi en plus faut que je m’en tape 4 ? :‘(

(j’espère que la fin sera différente)





5, j’ai oublié celui-ci<img data-src=" />









illidanPowa a écrit :



sauf que dans la plupart des films de Bruce Willis, il meurt pas, sauf celui-là <img data-src=" />





Il y en a un où il est mort dès le début …. <img data-src=" />









illidanPowa a écrit :



sauf que dans la plupart des films de Bruce Willis, il meurt pas, sauf celui-là <img data-src=" />





Y’a meme un de ses films où il est mort avant quand le film commence <img data-src=" />



Sinon c’est bien beau d’améliorer le JIT mais on fait des OS (iOS, Windows RT) qui interdisent ce fameux JIT à quiconque excepté le navigateur intégré (safari, IE), un peu paradoxal comme situation..







Soriatane a écrit :



Il y en a un où il est mort dès le début …. <img data-src=" />







Tu m’as grillé ! Je te hais !!



Au temps pour moi… Je savais déjà que l’Amiga surpassait l’Atari et OSX Windows, aussi bien qu’un mariage pour tous en Palestine entre végétariens membres de la Commission Européenne travaillant pour la RIAA.







Histoire de recarder un peu le sujet et de relancer le débat sur des bases apaisées. <img data-src=" />








tanguy_k a écrit :



Désolé mais voici une belle liste d’amalgames, de trucs incompris, de confusions et en plus mal rédigé.





Ouah, comme tu m’a mouché!



Ceci dit, amalgame est un bon mot pour décrire toutes les techno balbutiantes en cours d’étude autour du web, pour trouver le successeur ou le futur des applis web (et surtout: comment amener des jeux performants)



Quand tu écris: l’un n’empêche pas l’autre, soyons clair: si l’un commence à être nettement plus populaire, ou à afficher de meilleures performances ou avoir une super bibliothèque de développement, il marquera des points en notoriété.



Chaque organisme/marque, en poussant sa techno auprès des dev, espère capter une killer app. Ensuite, cela attirera peut-être les utilisateurs, et améliorera les parts de marché du navigateur, tout en forçant les autres à suivre et à se rendre compatible ou comparable.

Plus d’utilisateur du navigateur/OS peut mener à plus d’utilisateurs des services.



Sans compter que ce genre de techno pourrait être un cheval de troie pour contourner les app store (notamment ASM.js d’ailleurs, je ne suis pas sûr que PNacl soit accepté par Apple dans une version de Chrome).



En résumé: chacun prépare sa segmentation du web à sa sauce, pour essayer de le contrôler plus tard.









Jaskier a écrit :



5, j’ai oublié celui-ci<img data-src=" />





Le meilleur, c’est très clairement celui-là.



<img data-src=" /><img data-src=" /><img data-src=" />









BreizFenrir a écrit :



Le meilleur, c’est très clairement celui-là.



<img data-src=" /><img data-src=" /><img data-src=" />





Oh punaise, alors ça, comme diraient Michel et Michel, c’est du lourd, du très très lourd! <img data-src=" />









totor1977 a écrit :



Ce qui est paradoxal, c’est qu’on utilise de plus en plus un langage qui peut être désactivé dans le navigateur <img data-src=" />







Tu ne peux plus désactiver JavaScript dans Firefox sans passer par about:config, et c’est bien caché dans les paramètres avancés de Google Chrome.



Apple copie sur Microsoft. Microsoft avait déjà eu l’idée d’optimiser Javascript dans Internet Explorer il y a 2 ans.



http://blogs.msdn.com/b/ie/archive/2012/06/13/advances-in-javascript-performance…








misterB a écrit :



Heureusement que Google est là <img data-src=" /><img data-src=" />





Le monde sans Google ce serait un peu comme la terre sans Bruce Willis<img data-src=" /><img data-src=" />





les pc sans bill gates, apple sans wozniak, linux sans stallman…on peut aller loin ^^









Jaskier a écrit :



5, j’ai oublié celui-ci<img data-src=" />





Grâce à toi, mes prochaines soirées seront mémorables. Ou pas.

<img data-src=" />