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.
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ı
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?
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:
- CL 2431864: [devtools] Kullanıcı arabiriminde ileti dağıtımının performansla ilgili ek yükünü azaltma
- 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:
- İzlemeyi
chrome://tracing
kullanarak kaydet - Geliştirici Araçları'nda-Geliştirici Araçları'nı aç
- 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 |
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 > 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.