Startzeit der Entwicklertools verkürzen

Maksim Sadym
Maksim Sadym

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.

Startprozess der Entwicklertools

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

Die 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

Verbesserte Mechanismen

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:

  1. CL 2431864: [devtools] Reduzieren Sie den Leistungsaufwand für die Nachrichtenweiterleitung im Frontend.
  2. 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:

  1. Trace mit chrome://tracing aufzeichnen
  2. Entwicklertools in den Entwicklertools öffnen
  3. 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%

Entwicklertools-Auslastung der CPU-Zeit (ms)

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   Mehr   > 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.