Connexion
Abonnez-vous

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

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

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

Le 16 mai 2014 à 12h10

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).

Commentaires (60)

Vous devez être abonné pour pouvoir commenter.

Abonnez-vous
votre avatar







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=" />


votre avatar







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=" />


votre avatar







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=" />


votre avatar

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

votre avatar







Cara62 a écrit :



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







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


votre avatar







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=" />



votre avatar







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=" />


votre avatar







zefling a écrit :



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





que des choses autorisées monsieur le juge !


votre avatar







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.


votre avatar







Cara62 a écrit :



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







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


votre avatar







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=" />


votre avatar







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…


votre avatar







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=" />


votre avatar







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


votre avatar







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=" />


votre avatar







guildem a écrit :



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





Lequel ? Parce que bon, on a au moins:





votre avatar







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=" />


votre avatar







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=" />


votre avatar







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=" />


votre avatar







illidanPowa a écrit :



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





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


votre avatar







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=" />


votre avatar







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=" />


votre avatar







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=" />


votre avatar







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=" />


votre avatar







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………


votre avatar







misterB a écrit :



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







Anglicisme ! <img data-src=" />


votre avatar







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=" />


votre avatar







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=" />


votre avatar







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=" />


votre avatar







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=" />


votre avatar







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=" />


votre avatar







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=" />


votre avatar

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=" />

votre avatar







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…


votre avatar







illidanPowa a écrit :



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





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


votre avatar







Jaskier a écrit :



Lequel ? Parce que bon, on a au moins:





votre avatar







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=" />


votre avatar







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é.


votre avatar







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=" />


votre avatar







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=" />


votre avatar







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 !!


votre avatar

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=" />

votre avatar







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.


votre avatar







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=" />


votre avatar







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=" />


votre avatar







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.


votre avatar

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…

votre avatar







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 ^^


votre avatar



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.

votre avatar

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.

votre avatar







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)


votre avatar







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.


votre avatar







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=" />


votre avatar







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)


votre avatar







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.


votre avatar







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=" />.


votre avatar







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=" />


votre avatar







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.


votre avatar







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


votre avatar







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=" />


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

  • JavaScript : une exécution en fonction du contexte 

  • Un quatrième mode passant par LLVM 

  • Toujours plus de convergence 

Fermer