Skracanie czasu uruchamiania Narzędzi deweloperskich

Maksim Sadym
Maksim Sadym

Uruchamianie Narzędzi deweloperskich jest teraz o około 13% szybsze 🎉 (od 11,2 s do 10 s)

TL;DR; wynik jest uzyskiwany przez usunięcie nadmiarowej serializacji.

Opis

Podczas uruchamiania Narzędzi deweloperskich musi wykonać kilka wywołań silnika JavaScriptu V8.

Proces uruchamiania Narzędzi deweloperskich

Mechanizm, którego Chromium używa do wysyłania poleceń Narzędzi deweloperskich do wersji 8 (i ogólnie dla IPC), nosi nazwę mojo. Moi koledzy z zespołu, Benedikt Meurer i Sigurd Schneider, odkryli nieefektywność podczas pracy nad innym zadaniem i wpadli na pomysł, jak usprawnić ten proces, usuwając 2 zbędne etapy wysyłania i odbierania tych wiadomości.

Zobaczmy, jak działa mechanizm mojo.

Mechanizmy mojo

Mechanizmy mojo

Istnieje polecenie mojo EvaluateScript, które uruchamia polecenie JS. Zserializuje całe polecenie JS, łącznie z arguments, do ciągu kodu źródłowego JavaScript, który może być eval(). Jak można sobie wyobrazić, te ciągi mogą być dość długie i drogi. Po odebraniu polecenia przez V8 te ciągi kodu JavaScript są poddawane deserializacji przed uruchomieniem. Ten proces serializacji i deserializacji każdej wiadomości wiąże się ze znacznym nakładem pracy.

Benedikt Meurer zdał sobie sprawę, że serializacja i deserializacja arguments są dość kosztowne, a wszystkie kroki „Zserializuj polecenie JS w ciągu JS” i „Deserializacja ciągu JS” są zbędne i można je pominąć.

Szczegóły techniczne: RenderFrameHostImpl::ExecuteJavaScript

Jak się ulepszyliśmy

Ulepszone mechanizmy

Wprowadziliśmy kolejną metodę interfejsu API mojo, która pozwala nam bezpośrednio przekazywać nazwę obiektu, wywoływaną metodę oraz listę argumentów, bez konieczności tworzenia ciągu znaków z kodu źródłowego JavaScript. Pozwala to pominąć serializację i deserializację oraz eliminuje potrzebę analizowania kodu JavaScript.

Szczegóły techniczne dotyczące wdrożenia tej optymalizacji znajdziesz w tych 2 poprawkach:

  1. CL 2431864: [narzędzia deweloperskie] Zmniejszenie wydajności wysyłania wiadomości w interfejsie
  2. CL 2442012: [devtools] Użyj narzędzia ExecuteJavaScriptMethod w Narzędziach deweloperskich

Wpływ

Aby zmierzyć efektywność zmiany, przeprowadziliśmy pomiary porównujące wersje Chromium cb971089a058 i 4f213b39d581 (przed zmianą i po niej).

W przypadku obu zmian przeprowadziliśmy ten scenariusz 5 razy:

  1. Zarejestruj log czasu przy użyciu dodatku chrome://tracing
  2. Otwórz DevTools-on-DevTools
  3. Pobierz zarejestrowany log czasu CrRendererMain i porównaj wskaźniki specyficzne dla wersji V8.

Wyniki tych eksperymentów pokazują, że przy optymalizacji Narzędzia deweloperskie otwierają się ok.13% szybciej (z 11,2 s do 10 s).

Najciekawsze momenty, czasy pracy procesora

Nazwa metody Bez optymalizacji (ms) Zoptymalizowana (ms) Różnice (ms) Poprawa szybkości (%)
Łącznie 11,213.19 9953,99 -1259,20 12,65%
v8.run 499,67 3.61 -496.06 12,65%
V8.Execute 1,654.87 1349,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%

Czas ładowania procesora przez Narzędzia deweloperskie (ms)

Tabela z porównaniem danych śledzenia z pełną treścią śledzenia

W efekcie przeglądarka się otwiera i działa szybciej przy mniejszym zużyciu procesora. 🎉

Pobieranie kanałów podglądu

Jako domyślnej przeglądarki programistycznej możesz użyć Chrome Canary, Dev lub Beta. Te kanały podglądu dają dostęp do najnowszych funkcji Narzędzi deweloperskich, testują nowoczesne interfejsy API platform internetowych oraz wykrywają problemy w witrynie, zanim zrobią to użytkownicy.

Kontakt z zespołem Narzędzi deweloperskich w Chrome

Użyj tych opcji, aby omówić nowe funkcje i zmiany w poście lub wszelkich innych sprawach związanych z Narzędziami dla programistów.

  • Sugestię lub opinię możesz przesłać na stronie crbug.com.
  • Aby zgłosić problem z Narzędziami deweloperskimi, kliknij Więcej opcji   Więcej   > Pomoc > Zgłoś problemy z Narzędziami deweloperskimi.
  • zatweetować na @ChromeDevTools.
  • Komentarze do filmów o narzędziach dla deweloperów w YouTube lub filmach w YouTube ze wskazówkami dotyczącymi Narzędzi deweloperskich.