Suivez-nous

Réseau

WebKit : JetStream et Speedometer dévoilés

neilime

Publié le

 

Par

jetstram_webkit.png

Discrètement, dans l’ombre de la conférence des développeurs WWDC 2014, les équipes de WebKit qui comptent de nombreux employés d’Apple et développent le moteur de rendu utilisé par le navigateur Safari (voir les récentes évolutions de la compilation JavaScript FTLJIT), ont annoncé la mise à disposition de deux bancs d’essai JavaScript : JetStream pour mesurer la performance d’un moteur d’exécution JavaScript sous différents scénarios et Speedometer chargé de mesurer la réactivité d’une application web.

JetStream a été conçu dans l’optique de représenter une grande variété de scénarios de tests de performance, les développeurs embarqués dans WebKit considérant que les outils de mesure de performance actuels sont trop cantonnés dans leurs domaines respectifs, que ce soit JSBench, SunSpider ou Octane. En clair, les améliorations apportées par les développeurs au moteur WebKit avaient du mal à transparaître dans les batteries de tests actuellement disponibles et il leur fallait multiplier les bancs d’essai pour se faire une idée du gain de performance obtenu par le travail d’amélioration effectué sur leur moteur.

JetStream propose donc de mesurer de manière plus subtile que juste le temps de chargement d’une page pour arriver à un état défini après exécution du JavaScript. Différents scénarios impliquant différentes charges de travail ont donc été mis en place en utilisant des tests de SunSpider 1.0.2, Octane 2 ou de l’infrastructure de compilation LLVM grâce à Emscripten 1.13.

Les résultats sont intéressants pour l’équipe de développement, car JetStream permet de mettre en évidence que certaines optimisations apportent des gains de performance sur certains tests, mais les font régresser sur d’autres. Ce fut par exemple le cas lors de la mise au point de la nouvelle structure de compilation FTLJIT.

JetStream est disponible sur Browserbench.org/JetStream.

De son côté, Speedometer est plus spécifiquement chargé de mesurer la réactivité d’une application web. En effet, toute l’interaction d’un site web passe désormais par le JavaScript et donc par la capacité du moteur d’exécution à rapidement répondre aux actions effectuées par l’utilisateur.

Speedometer est donc chargé de simuler une multitude d’actions de l’utilisateur sur une page web et de mesurer à quelle vitesse les changements sont impactés dans la structure de la page web affichée. Jusqu’à présent en effet, il existait de nombreux outils de mesure des performances JavaScript, mais la plupart étaient orientés sur des fonctions de base du langage invisibles par les utilisateurs, par exemple assigner une valeur à un élément de la page et répéter cette action un très grand nombre de fois. Ce que les développeurs de WebKit appellent des micro-mesures ne permettent pas de mesurer la réactivité ressentie par un vrai utilisateur.

Speedometer permet donc de créer des enchaînements d’actions simulées comme des événements de clic sur un élément ou d’appui sur une touche clavier. Et déjà l’utilisation de ce nouveau banc d’essai a permis d’optimiser WebKit sur plusieurs aspects, dont la gestion de l’arborescence d’une page par WebKit, l’optimisation des JavaScripts bindings qui est la couche chargée du lien entre le code C++ du navigateur et le code JavaScript. Là aussi, l’apparition de la compilation en temps réel de certaines parties du code JavaScript d’une page web, a permis d’améliorer les performances mesurées par Speedometer, la compilation d’une partie du code étant parallèle à l’exécution sans compilation d’une autre partie de celui-ci.

Speedometer est disponible sur Browserbench.org/Speedometer.

Sources :

Speedometer: Benchmark for Web App Responsiveness

Introducing the JetStream benchmark suite