Das Starten der DevTools ist jetzt etwa 13% schneller 🎉 (von 11,2 Sekunden auf 10 Sekunden)
Zusammenfassung: Das Ergebnis wird durch Entfernen einer redundanten Serialization erzielt.
Übersicht
Beim Starten von DevTools müssen einige Aufrufe an die V8-JavaScript-Engine erfolgen.
Der Mechanismus, mit dem Chromium DevTools-Befehle an V8 sendet (und für die IPC im Allgemeinen), wird mojo
genannt. Meine Teamkollegen Benedikt Meurer und Sigurd Schneider haben bei der Arbeit an einer anderen Aufgabe eine Ineffizienz entdeckt und eine Idee zur Verbesserung des Prozesses entwickelt, indem zwei redundante Schritte beim Senden und Empfangen dieser Nachrichten entfernt wurden.
Sehen wir uns an, wie der mojo
-Mechanismus funktioniert.
Die mojo
-Mechanismen
Es gibt einen Mojo-Befehl EvaluateScript
, mit dem der JS-Befehl ausgeführt wird. Er serialisiert den gesamten JS-Befehl einschließlich der arguments
in einen JavaScript-Quellcode-String, der eval()
sein kann. Wie Sie sich vorstellen können, können diese Strings 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 verursacht erheblichen Overhead.
Benedikt Meurer erkannte, dass die Serialisierung und Deserialisierung der arguments
recht aufwendig ist und dass die gesamten Schritte „JS-Befehl in JS-String serialisieren“ und „JS-String deserialisieren“ redundant sind und übersprungen werden können.
Technische Details: RenderFrameHostImpl::ExecuteJavaScript
Verbesserungen
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 JavaScript-Quellcode-String erstellen zu müssen. So können wir die Serialisierung und Deserialisierung überspringen und müssen den JavaScript-Code nicht mehr parsen.
Technische Details zur Implementierung dieser Optimierung finden Sie in den folgenden zwei Patches:
- CL 2431864: [devtools] Performance-Overhead der Nachrichtenübermittlung im Front-End reduzieren
- CL 2442012: [devtools]
ExecuteJavaScriptMethod
in den Entwicklertools verwenden
Auswirkungen
Um die Wirksamkeit der Änderung zu messen, haben wir einige Messungen durchgeführt, bei denen wir die Chromium-Versionen cb971089a058 und 4f213b39d581 (vor und nach der Änderung) verglichen haben.
Für beide Versionen haben wir das folgende Szenario fünfmal ausgeführt:
- Trace mit
chrome://tracing
aufzeichnen - DevTools in DevTools öffnen
- Rufen Sie den aufgezeichneten
CrRendererMain
-Trace ab und vergleichen Sie die V8-spezifischen Messwerte.
Basierend auf diesen Tests wird DevTools mit der Optimierung ungefähr 13% schneller geöffnet (von 11, 2 Sekunden auf 10 Sekunden).
Highlights, CPU-Dauer
Methodenname | Nicht optimiert (ms) | Optimiert (ms) | Unterschiede (ms) | Geschwindigkeitsverbesserung (%) |
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% |
Vollständige Tabelle zum Vergleich von Messwerten für die Aufrufabfolge
Dadurch werden die DevTools schneller geöffnet und funktionieren mit weniger CPU-Auslastung. 🎉
Vorschaukanäle herunterladen
Verwenden Sie als Standard-Entwicklungsbrowser Chrome Canary, Chrome Dev oder Chrome Beta. Diese Vorabversionen bieten Zugriff auf die neuesten DevTools-Funktionen, ermöglichen den Test moderner Webplattform-APIs und helfen Ihnen, Probleme auf Ihrer Website zu finden, bevor Ihre Nutzer sie bemerken.
Chrome-Entwicklertools-Team kontaktieren
Mit den folgenden Optionen können Sie über neue Funktionen, Updates oder andere Themen im Zusammenhang mit den DevTools sprechen.
- Senden Sie uns Feedback und Funktionsanfragen unter crbug.com.
- Melden Sie ein DevTools-Problem über das Dreipunkt-Menü Weitere Optionen > Hilfe > DevTools-Problem melden.
- Tweeten Sie an @ChromeDevTools.
- Hinterlassen Sie Kommentare unter den YouTube-Videos zu den Neuigkeiten in den DevTools oder den YouTube-Videos mit Tipps zu den DevTools.