Google E-Tablolar'ın hesaplama çalışanını JavaScript'ten WasmGC'ye taşımasının nedeni

Google E-Tablolar, Google'da Chrome'da WasmGC'yi kullanan ilk ürünlerden biridir. 2022'de bu geçiş duyurulduktan sonra E-Tablolar ve Chrome ekipleri, optimizasyonlar hakkında gerçek zamanlı geri bildirim sağlamak için standartlaştırma, mühendislik ve araçlar üzerine işbirliği yaptı. Bu iş ortaklığı, Google'daki mühendislik ekiplerinin daha fazla Google uygulamasının WasmGC üzerinde çalışması için Chrome ile etkili bir şekilde nasıl çalışabileceği konusunda bir emsal teşkil etti.

Zorluk: JavaScript

Google E-Tablolar'ın hesaplama motoru ilk olarak Java'da yazılmış ve 2006'da kullanıma sunulmuştur. Ürünün ilk günlerinde tüm hesaplamalar sunucuda yapıldı. Ancak, motor 2013'ten itibaren tarayıcıda JavaScript kullanarak çalışmaktadır. Bu ilk olarak Google Web Araç Seti (GWT) ve daha sonra Java kullanılarak Closure JavaScript aktarıcısı (J2CL) kullanılarak yapıldı. JavaScript hesaplama motoru, bir Web Çalışanı'nda çalışır ve bir MessageChannel kullanarak ana iş parçacığıyla iletişim kurar.

Kullanıcıların sunucudan hesaplama motorunun JavaScript sürümüne (ve daha sonra GWT'den J2CL'ye) taşınması, dikkatli doğrulama gerektiren büyük bir girişimdi. JavaScript hesaplama motorunun, Java sürümüyle tam olarak aynı sonuçları ürettiğinden emin olmak için E-Tablolar ekibi dahili bir doğrulama mekanizması geliştirdi. Bu mekanizma, büyük bir sayfa kümesini işleyebilir ve hesaplama motorunun birden fazla sürümünde sonuçların aynı olduğunu doğrulayabilir. E-Tablolar ekibi, E-Tablolar'da yapılan değişiklikleri doğrulamak için bu aracı düzenli olarak kullanır. Ancak ekip yalnızca bu hesaplamaların sonuçlarını karşılaştırmakla kalmadı, aynı zamanda istemcideki JavaScript ile sunucudaki Java arasındaki performansı da karşılaştırdı. Hesaplama motorunun JavaScript sürümünün, Java sürümünden üç kat daha yavaş olduğu tespit edildi.

JavaScript neden Java'dan daha yavaş?

JavaScript, genel yazılmış dinamik bir dil için hızlıdır. Son 15 yılda tam zamanında derleyicilere (örneğin, Maglev, Sparkplug ve Turbofan) yapılan yoğun yatırımlar JavaScript'in performansını artırdı. Ancak JavaScript'in esnek türleri ve dinamik davranışı, JIT derleyicilerinin optimum kodu oluşturmasını zorlaştırır. Bu, JavaScript'in ham işleme hızı için hâlâ Java ve C++ gibi dillerin gerisinde olduğu anlamına gelir. TypeScript, JavaScript'e tür güvenliği ekler ancak bu tür bilgiler, derleyicilerin optimum kodu oluşturmak için ihtiyaç duyduğu garanti türlerini sağlamak yerine geliştirmeyi kolaylaştırmak amacıyla tasarlanmıştır. Büyük e-tabloların hesaplanmasının onlarca saniye sürebildiği Google E-Tablolar gibi durumlarda JavaScript hızlıdır ancak yeterince hızlı değildir.

Çözüm: WasmGC

WasmGC, mevcut WebAssembly spesifikasyonunun uzantısıdır. Bu özellik, atık olarak toplanan dilleri (Java gibi) derlemek için gereken temel öğeleri ekler. Örneğin WasmGC, türleri tanımlamaya ve atık toplanan veri yapılarını dağıtmaya yönelik talimatlar ekler. WasmGC, atık toplama dilleri için, Wasm'ın C++ için yaptığı gibi (örneğin, Photoshop veya Google Earth ) de bu dilleri neredeyse yerel hızda web'e taşımayı planlıyor. Google olarak, çöple toplanan dillerin popülerliği nedeniyle WasmGC'nin Wasm'dan daha etkili olma potansiyeline sahip olduğuna inanıyoruz.

Google Workspace, Chrome ile iş ortaklığı yapıyor

WasmGC MVP taslak spesifikasyonu 2019'da yayınlandı. 2020'nin sonlarında Google Workspace ve Chrome, E-Tablolar hesaplama motorunu kullanarak WasmGC'yi değerlendirmek için işbirliği yaptı. Workspace'in çoklu platform ekibi, derleyici ve aktarıcı oluşturma ve optimize etme konusunda büyük bir uzmanlığa sahiptir. Workspace'in bir parçası olan E-Tablolar'ın WasmGC'yi değerlendirmek için ideal bir aday olduğu belirlendi: Performans açısından hassastır ve sağlam performans ile doğruluğu doğrulama mekanizmalarına sahiptir. Chrome'da, WasmGC çalışma zamanını geliştirip optimize etmek için V8 ekibi ve önceden (AOT) optimizasyonları derlemek üzere Binaryen'e katkıda bulunanlar bulunur. Chrome ve Workspace arasında, bir WasmGC araç zinciri oluşturmak ve optimize etmek için gereken tüm uzmanlık vardır. Google E-Tablolar ise ideal test ortamıdır.

İlk prototip,

2021'in ortalarında ekipler, çalışan bir Java'dan WasmGC derleyicisine sahipti. Aynı yılın sonuna doğru Google E-Tablolar'ın WasmGC olarak çalışan ve hesaplamalar yapan bir prototip sürümü vardı. Kurs boyunca birçok zorluğun üstesinden geldi. Profil çıkarma ve yığın dökümlerini almaya yönelik araçlar mevcut değildi ve geliştirilmeleri gerekiyordu. Mevcut uygulama, WasmGC için yedek öğelerin bulunması veya yazılması gereken birçok JavaScript kitaplığına dayanıyordu. Spesifikasyonun, derleyicinin ve yeni kitaplıkların deneysel doğası nedeniyle Wasm hesaplama motorunun doğruluğunun doğrulanması çok zaman alıyordu. Ancak E-Tablolar'ın doğrulama mekanizmaları bir kez daha son derece yararlı oldu. Ekipler sonuçta her şeyi çalıştırdı ve performans verileri 2022'nin başlarında gelmeye başladı.

Ek optimizasyonlar

E-Tablolar Wasm'ın ilk sürümü, hesaplama performansını JavaScript'ten yaklaşık iki kat daha yavaş gösterdi. Bununla birlikte, bu yeni bir spesifikasyon, yeni derleyici ve birkaç yeni kitaplık için kötü bir sonuç değildir. Bu noktadan sonra, E-Tablolar ekibi optimizasyona başladı. Buldukları optimizasyonlardan birkaçı ortaya çıktı:

  • Java Sanal Makinesi (JVM) ve V8'de mevcut olan temel optimizasyonları kopyalama.
  • Son derece optimize edilmiş tarayıcı API'leri kullanma.
  • JavaScript'e özel kodlama kalıplarının kaldırılması.

İlk olarak, E-Tablolar ekibinin diğer araç zincirlerinde mevcut olan optimizasyonları kopyalaması gerekiyordu. Bunun en iyi örneği, uzun zamandır JVM ve V8 tarafından optimize edilen, ancak WasmGC için hiçbir şey olmayan sanal yöntem gönderme işleminin optimize edilmesidir. Çok sık yapılan iki optimizasyon olan spekülatif satır içine alma ve devre dışı bırakma yöntemlerinin uygulanması, hesaplama süresini yaklaşık% 40 oranında hızlandırdı.

İkincisi, tarayıcı API'lerinin optimize edilmiş yerel uygulamalarla desteklendiği ve Wasm kullanımıyla rekabet etmenin zor olduğu durumlar var. Dizeler ve normal ifadeler iyi birer örnektir. Spesifik olarak, ekip, normal ifadelerle, Chrome'daki re2j'den (WasmGC olarak derlenmiş) her normal ifadeyi kendi makine koduna derleyebilen RegExp tarayıcı API'sine geçerken normal ifade işlemlerinde neredeyse 100 kat hızlandırılmıştı.

Son olarak, yıllar süren optimizasyonların kod tabanının JavaScript'e aşırı uygun olmasına neden olduğunu keşfettiler. Örneğin, E-Tablolar'da diziler ve haritalar arasındaki çizgileri bulanıklaştıran temel bir veri yapıları vardı. Bu, seyrek dizileri harita şeklinde otomatik olarak modelleyen, ancak diğer platformlarda yavaş gerçekleşen JavaScript'te etkilidir. Dolayısıyla, kodu platformdan bağımsız bir şekilde yeniden yazmaları gerekti. Ekibin WebAssembly ile ilgili sevdiği bir şey daha var: Bu, çoklu platform uygulamalarının web'de iyi performans elde etmesini kolaylaştırır. Tüm uygulamanızı JavaScript'in kendine özgü özelliklerine göre uyarlamanız gerekmez.

Nihai sonuç

Tüm bu optimizasyonlardan sonra E-Tablolar'ın son WasmGC sürümü, hesaplama performansını JavaScript'ten yaklaşık iki kat daha hızlı hale getiriyor. Bu da ilk WasmGC sürümünün başlangıç noktasından itibaren dört kat iyileşme anlamına geliyor.

Sonuç

WasmGC, geliştiricilerin web uygulamaları oluşturma yöntemini geliştirme potansiyeline sahip güçlü bir teknolojidir. Önümüzdeki yıllarda Google'da, WasmGC'nin paylaşılan bellekli çoklu iş parçacıklarını desteklemeyi ve tek iş parçacıklı performansını daha da iyileştirmesini sağlamayı umuyoruz. Tüm web geliştiricilerinin bir sonraki yüksek performanslı projeleri için WasmGC'yi kullanmayı düşünmelerini öneririz. Bize katılın ve web'i birlikte daha hızlı ve daha sorunsuz bir yer haline getirin.

Teşekkür

WasmGC uygulaması üzerine çalışanlar için teşekkür ederiz. Bu örnek olay, WasmGC, Janice Gurme, Janice Gurme, Diwas Adhikary, Matthew Albright, Diwas Adhikary, Matthew Albright, Asim Fazal, Janice Gu, Goktug Gokdogan, Janice Gu, Adam Kleo