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.
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
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
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:
- CL 2431864: [devtools] Réduire l'impact sur les performances de la distribution des messages dans l'interface
- 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:
- Enregistrer une trace avec
chrome://tracing
- Ouvrir les outils de développement
- 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% |
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 > 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.