DevTools başlatma süresini iyileştirme

Maksim Sadym
Maksim Sadym

Geliştirici Araçları başlangıcı artık yaklaşık% 13 daha hızlı 🎉 (11,2 saniyeden 10 saniyeye kadar)

Özet: Sonuç, gereksiz serileştirme kaldırılarak gerçekleştirilir.

Genel bakış

Geliştirici Araçları başlarken, V8 JavaScript motoruna bazı çağrılar yapmalıdır.

Geliştirici Araçları başlatma süreci

Chromium'un, Geliştirici Araçları komutlarını V8'e (ve genel olarak IPC için) göndermek için kullandığı mekanizma mojo olarak adlandırılır. Ekip arkadaşlarım Benedikt Meurer ve Sigurd Schneider, başka bir görev üzerinde çalışırken verimsiz olduğunu fark etti ve bu mesajların gönderilme ve alınma şekliyle ilgili iki gereksiz adımı kaldırarak süreci iyileştirme fikrini ortaya attı.

mojo mekanizmasının işleyiş şekline göz atalım.

mojo mekanizmaları

Mojo mekanizmaları

JS komutunu çalıştıran bir mojo komutu EvaluateScript bulunur. arguments komutu da dahil olmak üzere JS komutunun tamamını eval() olabilecek bir JavaScript kaynak kodu dizesine serileştirir. Tahmin edebileceğiniz gibi bu dizeler oldukça uzun ve pahalı olabiliyor. Komut V8 tarafından alındıktan sonra, bu JavaScript kodu dizeleri çalıştırılmadan önce seri durumdan çıkarılır. Her bir iletiyi seri hale getirme ve seri durumdan çıkarma işlemi, ciddi ek yük oluşturur.

Benedikt Meurer, arguments için serileştirme ve seri durumdan çıkarma işlemlerinin oldukça pahalı olduğunu, "JS komutunu JS dizesine serileştirme" ve "JS dizesinin seri durumunu kaldırma" adımlarının tamamının gereksiz olduğunu ve atlanabileceğini fark etti.

Teknik ayrıntılar: RenderFrameHostImpl::ExecuteJavaScript

Nasıl iyileştik?

Geliştirilmiş mekanizmalar

JavaScript kaynak kodu dizesini oluşturmak yerine, nesne adını, çağrılacak yöntemi ve bağımsız değişkenler listesini doğrudan iletmemize olanak tanıyan başka bir mojo API yöntemini kullanıma sunduk. Bu, serileştirme ve seri durumdan çıkarma işlemlerini atlamamızı sağlar ve JavaScript kodunu ayrıştırma ihtiyacını ortadan kaldırır.

Bu optimizasyonu nasıl uyguladığımızla ilgili teknik ayrıntılar için aşağıdaki iki yamayı inceleyin:

  1. CL 2431864: [devtools] Kullanıcı arabiriminde ileti dağıtımının performansla ilgili ek yükünü azaltma
  2. CL 2442012: [devtools] Geliştirici Araçları'nda ExecuteJavaScriptMethod kullanın

Etki

Bu değişikliğin etkinliğini ölçmek için cb971089a058 ve 4f213b39d581 (değişiklikten önceki ve sonraki) Chromium revizyonlarını karşılaştıran bazı ölçümler yaptık.

Her iki düzeltme için de aşağıdaki senaryoyu 5 kez çalıştırdık:

  1. İzlemeyi chrome://tracing kullanarak kaydet
  2. Geliştirici Araçları'nda-Geliştirici Araçları'nı aç
  3. Kaydedilen CrRendererMain izini alın ve V8'e özgü metrikleri karşılaştırın.

Bu denemelere göre Geliştirici Araçları, optimizasyonla yaklaşık% 13 daha hızlı (11,2 saniyeden 10 saniyeye kadar) açılıyor.

Öne çıkanlar, CPU süreleri

Yöntem adı Optimize edilmedi (ms) Optimize edilmiş (ms) Fark (ms) Hız artışı (%)
Toplam 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

Geliştirici Araçları yükleme CPU süresi (ms)

Tam izleme metrikleri karşılaştırma tablosu

Bunun sonucunda Geliştirici Araçları, daha az CPU kullanımı ile daha hızlı çalışır. 🎉

Önizleme kanallarını indirme

Varsayılan geliştirme tarayıcınız olarak Chrome Canary, Dev veya Beta'yı kullanabilirsiniz. Bu önizleme kanalları en yeni Geliştirici Araçları özelliklerine erişmenizi, son teknoloji ürünü web platformu API'lerini test etmenizi ve kullanıcılarınızdan önce sitenizdeki sorunları bulmanızı sağlar.

Chrome Geliştirici Araçları ekibiyle iletişim kurma

Yayındaki yeni özellikleri ve değişiklikleri ya da Geliştirici Araçları ile ilgili diğer her şeyi tartışmak için aşağıdaki seçenekleri kullanın.

  • Öneri veya geri bildirimlerinizi crbug.com adresinden bize iletebilirsiniz.
  • Geliştirici Araçları'ndaki Diğer seçenekler   Diğer > Yardım > Geliştirici Araçları ile ilgili sorun bildir bölümüne giderek Geliştirici Araçları sorunlarını bildirin.
  • @ChromeDevTools adresinden tweet atabilirsiniz.
  • Geliştirici Araçları YouTube videoları veya Geliştirici Araçları ipuçları YouTube videolarına yorum yazın.