Der Start der Entwicklertools ist jetzt ~13% schneller 🎉 (von 11,2 Sek. auf 10 Sek.)
Zusammenfassung: Das Ergebnis wird durch Entfernen einer redundanten Serialisierung erreicht.
Überblick
Während die Entwicklertools gestartet werden, müssen einige Aufrufe an die V8-JavaScript-Engine gesendet werden.
Der Mechanismus, mit dem Chromium Entwicklertools an V8 (und für IPC im Allgemeinen) sendet, heißt mojo
. Meine Teammitglieder Benedikt Meurer und Sigurd Schneider haben bei der Arbeit an einer anderen Aufgabe eine Ineffizienz festgestellt und hatten eine Idee, um den Prozess zu verbessern, indem sie zwei redundante Schritte beim Senden und Empfangen dieser Nachrichten entfernen.
Sehen wir uns genauer an, wie der mojo
-Mechanismus funktioniert.
mojo
-Mechanismen
Der mojo-Befehl EvaluateScript
führt den JS-Befehl aus. Er serialisiert den gesamten JS-Befehl, einschließlich arguments
, in einen JavaScript-Quellcode, der eval()
sein kann. Wie du dir vielleicht vorstellen kannst, können diese Zeichenfolgen ziemlich lang und teuer werden. Nachdem der Befehl von V8 empfangen wurde, werden diese JavaScript-Code-Strings vor der Ausführung deserialisiert. Dieser Prozess der Serialisierung und Deserialisierung für jede einzelne Nachricht erzeugt einen erheblichen Mehraufwand.
Benedikt Meurer erkannte, dass die Serialisierung und Deserialisierung von arguments
ziemlich teuer ist und dass die gesamten Schritte „Serialize JS Command to JS string“ und „Deserialize JS string“ überflüssig sind und übersprungen werden können.
Technische Details: RenderFrameHostImpl::ExecuteJavaScript
Was wir verbessert haben
Wir haben eine weitere mojo-API-Methode eingeführt, mit der wir den Objektnamen, die aufzurufende Methode und die Liste der Argumente direkt übergeben können, anstatt den String des JavaScript-Quellcodes erstellen zu müssen. Dadurch können wir die Serialisierung und Deserialisierung überspringen und den JavaScript-Code nicht mehr parsen.
Technische Details zur Implementierung dieser Optimierung finden Sie in diesen beiden Patches:
- CL 2431864: [devtools] Reduzieren Sie den Leistungsaufwand für die Nachrichtenweiterleitung im Frontend.
- CL 2442012: [devtools]
ExecuteJavaScriptMethod
in den Entwicklertools verwenden
Auswirkungen
Wir haben einige Messungen durchgeführt und die Chromium-Überarbeitungen cb971089a058 und 4f213b39d581 (vor und nach der Änderung) verglichen, um die Wirksamkeit der Änderung zu messen.
Für beide Überarbeitungen haben wir das folgende Szenario fünfmal ausgeführt:
- Trace mit
chrome://tracing
aufzeichnen - Entwicklertools in den Entwicklertools öffnen
- Rufen Sie den aufgezeichneten
CrRendererMain
-Trace ab und vergleichen Sie die V8-spezifischen Messwerte.
Basierend auf diesen Tests werden die Entwicklertools mit der Optimierung etwa 13% schneller geöffnet (von 11, 2 auf 10 Sekunden).
Highlights, CPU-Dauer
Methodenname | Nicht optimiert (ms) | Optimiert (ms) | Unterschiede (ms) | Verbesserte Geschwindigkeit (%) |
Summe | 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% |
Vergleichstabelle mit vollständigen Tracing-Messwerten
Dadurch werden die Entwicklertools geöffnet und funktioniert schneller bei geringerer CPU-Auslastung. 🎉
Vorschaukanäle herunterladen
Sie können Canary, Dev oder Beta als Standardbrowser für die Entwicklung verwenden. Über diese Vorschaukanäle erhältst du Zugriff auf die neuesten Entwicklertools, kannst hochmoderne Webplattform-APIs testen und Probleme auf deiner Website erkennen, bevor deine Nutzer es tun.
Kontaktaufnahme mit dem Team für Chrome-Entwicklertools
Mit den folgenden Optionen kannst du die neuen Funktionen und Änderungen des Beitrags oder andere Aspekte der Entwicklertools besprechen.
- Senden Sie uns über crbug.com einen Vorschlag oder Feedback.
- Melde ein Problem mit den Entwicklertools über Weitere Optionen > Hilfe > Probleme mit den Entwicklertools melden in den Entwicklertools.
- Twittern Sie unter @ChromeDevTools.
- Hinterlasse Kommentare in den YouTube-Videos mit den Neuerungen in den Entwicklertools oder in YouTube-Videos mit Tipps zu den Entwicklertools.