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 à 10 s)

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

Présentation

Pendant le 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 les 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 une inefficacité lorsqu'ils travaillaient sur une autre tâche. Ils ont donc eu l'idée d'améliorer le processus en supprimant deux étapes redondantes dans l'envoi et la réception de ces messages.

Découvrons comment fonctionne le mécanisme mojo.

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 très longues et coûteuses. Une fois la commande reçue par V8, ces chaînes de code JavaScript sont désérialisées avant d'être exécutées. Ce processus de sérialisation et de désérialisation pour chaque message entraîne des frais importants.

Benedikt Meurer s'est rendu compte que la sérialisation et la désérialisation de arguments sont assez coûteuses, et que les étapes "Serialize JS command to JS string" et "Deserialize JS string" sont redondantes et peuvent être ignorées.

Détails techniques: RenderFrameHostImpl::ExecuteJavaScript

Nos améliorations

Mécanismes améliorés

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 de créer la chaîne de code source JavaScript. Cela nous permet d'ignorer la sérialisation et la désérialisation, et nous évite d'avoir à analyser le code JavaScript.

Pour obtenir des informations techniques sur la façon dont nous avons implémenté cette optimisation, consultez les deux correctifs suivants:

  1. CL 2431864: [devtools] Réduction de 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é du changement, nous avons effectué des mesures en 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 reprises:

  1. Enregistrer une trace avec chrome://tracing
  2. Ouvrir les outils de développement sur 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) avec l'optimisation.

Temps forts, durées de CPU

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 du chargement des outils de développement (ms)

Tableau comparatif des métriques de traçage complet

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

Télécharger les canaux de prévisualisation

Nous vous conseillons d'utiliser Chrome Canary, Dev ou Beta 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 pointe de plates-formes Web et de détecter les problèmes sur votre site avant même que vos utilisateurs ne le fassent.

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

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

  • Envoyez-nous une suggestion ou des commentaires via crbug.com.
  • Signalez un problème lié aux outils de développement en accédant à Plus d'options   More > Aide > Signaler un problème dans les outils de développement.
  • Envoyez un tweet à @ChromeDevTools.
  • Laissez des commentaires sur les nouveautés des outils de développement vidéos YouTube ou les vidéos YouTube de nos conseils sur les outils de développement.