Startzeit der Entwicklertools verkürzen

Maxim Sadym
Maxim Sadym

Die Entwicklertools starten jetzt ca.13% schneller 🎉 (von 11,2 Sekunden auf 10 Sekunden)

Kurzfassung: Das Ergebnis wird durch Entfernen einer redundanten Serialisierung erreicht.

Überblick

Während die Entwicklertools hochgefahren werden, müssen einige Aufrufe an die V8-JavaScript-Engine gesendet werden.

Startvorgang der Entwicklertools

Der Mechanismus, mit dem Chromium Entwicklertools-Befehle an V8 sendet (und allgemein für IPC), heißt mojo. Meine Teamkollegen Benedikt Meurer und Sigurd Schneider entdeckten bei der Arbeit an einer anderen Aufgabe eine Ineffizienz. Sie hatten die Idee, den Prozess zu verbessern, indem sie zwei redundante Schritte beim Senden und Empfangen dieser Nachrichten beseitigen.

Sehen wir uns einmal genauer an, wie der mojo-Mechanismus funktioniert.

Die mojo-Mechanismen

Die Mojo-Mechanismen

Der mojo-Befehl EvaluateScript führt den JS-Befehl aus. Sie serialisiert den gesamten JS-Befehl, einschließlich arguments, in einen JavaScript-Quellcode, der eval() sein kann. Wie Sie sich vorstellen können, 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 erheblichen Mehraufwand.

Benedikt Meurer erkannte, dass die Serialisierung und Deserialisierung von arguments relativ teuer ist und dass die gesamten Schritte "Serialize JS Command to JS string" und "Deserialize JS string" redundant sind und übersprungen werden können.

Technische Details: RenderFrameHostImpl::ExecuteJavaScript

So haben wir uns verbessert

Verbesserte Mechanismen

Wir haben eine weitere mojo-API-Methode vorgestellt, 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 Serialisierung und Deserialisierung übersprungen werden und der JavaScript-Code muss nicht geparst werden.

Technische Details zur Implementierung dieser Optimierung finden Sie in den folgenden beiden Patches:

  1. CL 2431864: [devtools] Leistungs-Overhead der Nachrichtenweiterleitung im Front-End reduzieren
  2. CL 2442012: [devtools] ExecuteJavaScriptMethod in den Entwicklertools verwenden

Auswirkungen

Um die Wirksamkeit der Änderung zu messen, haben wir die Chromium-Überarbeitungen cb971089a058 und 4f213b39d581 (vor und nach der Änderung) verglichen.

Für beide Überarbeitungen haben wir das folgende Szenario fünfmal ausgeführt:

  1. Trace mit chrome://tracing aufzeichnen
  2. Entwicklertools in Entwicklertools öffnen
  3. Rufen Sie das aufgezeichnete CrRendererMain-Trace ab und vergleichen Sie die V8-spezifischen Messwerte.

Basierend auf diesen Tests öffnet sich die Entwicklertools um ca.13% schneller (von 11, 2 auf 10 Sekunden) durch die Optimierung.

Highlights, CPU-Dauer

Methodenname Nicht optimiert (ms) Optimiert (ms) Unterschiede (ms) Höhere Geschwindigkeit (%)
Gesamt 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 – CPU-Auslastungszeit (ms)

Vollständige Vergleichstabelle für Tracing-Messwerte

Dadurch werden die Entwicklertools geöffnet und funktioniert schneller bei geringerer CPU-Auslastung. 🎉

Vorschaukanäle herunterladen

Du kannst Chrome Canary, Dev oder Beta als Standardbrowser für die Entwicklung verwenden. Mit diesen Vorschaukanälen erhalten Sie Zugriff auf die neuesten Funktionen der Entwicklertools, können bahnbrechende Webplattform-APIs testen und Probleme auf Ihrer Website erkennen, noch bevor Ihre Nutzer dies tun.

Chrome-Entwicklertools-Team kontaktieren

Verwende die folgenden Optionen, um die neuen Funktionen und Änderungen im Beitrag oder andere Themen im Zusammenhang mit den Entwicklertools zu besprechen.

  • Sende uns über crbug.com einen Vorschlag oder Feedback.
  • Wenn du ein Problem mit den Entwicklertools melden möchtest, klicke in den Entwicklertools auf Weitere Optionen   Mehr   > Hilfe > Probleme mit Entwicklertools melden.
  • Senden Sie einen Tweet an @ChromeDevTools.
  • Hinterlasse Kommentare unter YouTube-Videos oder YouTube-Videos mit Tipps zu DevTools.