Améliorer le temps de démarrage des outils de développement

Maksim Sadym
Maksim Sadym

Le démarrage des outils de développement est désormais environ 13% plus rapide 🎉 (de 11,2 s à 10 s)

Résumé : le résultat est obtenu en supprimant une sérialisation redondante.

Présentation

Lors du démarrage des outils de développement, ils doivent appeler le moteur JavaScript V8.

Processus de démarrage des outils de développement

Le mécanisme utilisé par Chromium pour envoyer des commandes des outils de développement à V8 (et pour l'IPC en général) s'appelle mojo. Mes collègues Benedikt Meurer et Sigurd Schneider ont découvert un problème d'efficacité alors qu'ils travaillaient sur une autre tâche. Ils ont alors eu l'idée d'améliorer le processus en supprimant deux étapes redondantes dans la façon dont ces messages sont envoyés et reçus.

Examinons de plus près le fonctionnement du mécanisme mojo.

Les mécanismes mojo

Les mécanismes mojo

Il existe une commande mojo EvaluateScript qui exécute la commande JS. Il sérialise l'ensemble de la commande JS, y compris arguments, dans une chaîne de code source JavaScript qui peut être eval(). Comme vous pouvez l'imaginer, ces chaînes peuvent devenir assez longues et coûteuses. Une fois la commande reçue par V8, ces chaînes de code JavaScript sont désérialisées avant de s'exécuter. Ce processus de sérialisation et de désérialisation pour chaque message génère une surcharge importante.

Benedikt Meurer s'est rendu compte que la sérialisation et la désérialisation de arguments sont assez coûteuses, et que toutes les étapes "Sérialiser la commande JS en chaîne JS" et "Désérialiser la chaîne JS" sont redondantes et peuvent être ignorées.

Détails techniques: RenderFrameHostImpl::ExecuteJavaScript

Nos améliorations

Amélioration des mécanismes

Nous avons introduit une autre méthode API mojo, qui nous permet de transmettre directement le nom de l'objet, la méthode à appeler et la liste d'arguments, au lieu d'avoir à créer la chaîne du code source JavaScript. Cela nous permet d'ignorer la sérialisation et la désérialisation, et d'avoir à analyser le code JavaScript.

Pour obtenir des détails techniques sur la mise en œuvre de cette optimisation, consultez les deux correctifs suivants:

  1. CL 2431864: [devtools] Réduire l'impact sur les performances de la distribution des messages dans l'interface
  2. CL 2442012: [devtools] Utiliser ExecuteJavaScriptMethod dans les outils de développement

Impact

Pour mesurer l'efficacité de la modification, nous avons effectué quelques mesures comparant les révisions de Chromium cb971089a058 et 4f213b39d581 (avant et après la modification).

Pour les deux révisions, nous avons exécuté le scénario suivant cinq fois:

  1. Enregistrer une trace avec chrome://tracing
  2. Ouvrir les outils de développement
  3. Obtenez la trace CrRendererMain enregistrée et comparez les métriques spécifiques à V8.

D'après ces tests, les outils de développement s'ouvrent environ 13% plus vite (de 11,2 à 10 s) grâce à l'optimisation.

Temps forts, durées de processeur

Nom de la méthode Non optimisé (ms) Optimisé (ms) Différences (ms) Amélioration de la vitesse (%)
Total 11 213,19 9 953,99 -1 259,20 12,65%
v8.run 499,67 3.61 -496,06 12,65%
V8.Execute 1 654,87 1 349,61 -305,25 3,07%
v8.callFunction 1 171,84 1 339,77 167,94 -1,69%
v8.compile 133,93 3,56 -130,37 1,31%

Temps CPU de chargement des outils de développement (ms)

Tableau de comparaison des métriques de traçage complet

Par conséquent, les outils de développement s'ouvrent et fonctionnent plus rapidement en utilisant moins de processeur. 🎉

Télécharger les canaux de prévisualisation

Vous pouvez utiliser Chrome Canary, Dev ou Bêta comme navigateur de développement par défaut. Ces versions preview vous permettent d'accéder aux dernières fonctionnalités des outils de développement, de tester des API de plates-formes Web de pointe et de détecter les problèmes sur votre site avant vos utilisateurs.

Contacter l'équipe des outils pour les développeurs Chrome

Utilisez les options suivantes pour discuter des nouvelles fonctionnalités et des modifications dans l'article, ou de tout autre sujet lié aux outils de développement.

  • Envoyez-nous une suggestion ou un commentaire via crbug.com.
  • Signalez un problème dans les outils de développement en sélectionnant Autres options   More   > Aide > Signaler un problème dans les outils de développement dans les outils de développement.
  • Tweetez à l'adresse @ChromeDevTools.
  • Faites-nous part de vos commentaires sur les vidéos YouTube sur les nouveautés des outils de développement ou sur les vidéos YouTube de conseils pour les outils de développement.