Google E-Tablolar, Google'da Chrome'da WasmGC kullanan ilk ürünlerden biridir. Bu değişiklik 2022'de duyuruldu. E-Tablolar ve Chrome ekipleri, standartlaştırma, mühendislik ve araç kullanımı konusunda iş ortaklığı yaparak optimizasyonlarla ilgili anlık geri bildirim sağladı. Bu iş ortaklığı, Google'daki mühendislik ekiplerinin WasmGC'de daha fazla Google uygulamasının çalışması için Chrome ile nasıl etkili bir şekilde çalışabileceğine dair bir örnek teşkil etti.
Zorluk: JavaScript
Google E-Tablolar hesaplama motoru, orijinal olarak Java'da yazılmış ve 2006'da kullanıma sunulmuştur. Ürünün ilk günlerinde tüm hesaplamalar sunucuda gerçekleşiyordu. Ancak 2013'ten beri motor, JavaScript kullanarak tarayıcıda çalıştırılıyor. Bu işlem başlangıçta Google Web Toolkit (GWT) aracılığıyla, daha sonra Java to Closure JavaScript derleyicisi (J2CL) aracılığıyla gerçekleştirildi. JavaScript hesaplama motoru bir Web Çalışanı'nda çalışır ve MessageChannel
kullanarak ana iş parçacığıyla iletişim kurar.
Kullanıcıları sunucudan hesaplama motorunun JavaScript sürümüne (ve daha sonra GWT'den J2CL'ye) taşımak, dikkatli doğrulama gerektiren büyük bir girişimdi. E-Tablolar ekibi, JavaScript hesaplama motorunun Java sürümüyle tam olarak aynı sonuçları üretmesini sağlamak için dahili bir doğrulama mekanizması geliştirdi. Bu mekanizma, büyük bir e-tablo grubunu işleyebilir ve sonuçların hesaplama motorunun birden fazla sürümü arasında aynı olduğunu doğrulayabilir. E-Tablolar ekibi, E-Tablolar'daki değişiklikleri doğrulamak için bu aracı düzenli olarak kullanır. Ancak ekip yalnızca bu hesaplamaların sonuçlarını değil, 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ğunu tespit ettiler.
JavaScript neden Java'dan daha yavaştır?
JavaScript, gevşek yazılmış, dinamik bir dil için hızlıdır. Son 15 yılda tam zamanında (JIT) derleyicilere (ör. Maglev, Sparkplug ve Turbofan) yapılan yoğun yatırımlar JavaScript'in performansını artırdı. Ancak JavaScript'in gevşek türleri ve dinamik davranışı, JIT derleyicilerin optimum kod oluşturmasını zorlaştırır. Bu, JavaScript'in ham işlem hacmi açısından Java ve C++ gibi dillerin gerisinde olduğu anlamına gelir. TypeScript, JavaScript'e tür güvenliği ekler ancak bu tür bilgileri, derleyicilerin en uygun kodu oluşturmak için ihtiyaç duyduğu türden garantiler sağlamak amacıyla değil, geliştirmeyi kolaylaştırmak için tasarlanmıştır. Büyük e-tabloların hesaplanmasının onlarca saniye sürebileceğ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 uzantı, çöp toplanan dilleri (Java gibi) derlemek için gereken ilkelleri ekler. Örneğin, WasmGC türleri tanımlama ve çöp toplanan veri yapılarını ayırma talimatları ekler. WasmGC, C++ (ör. Photoshop veya Google Earth) için Wasm'in yaptığı şeyi, yani bu dilleri web'e yerel hıza yakın bir hızda getirmek için hazır. Google olarak, çöp toplayıcı dillerin popülerliği nedeniyle WasmGC'nin Wasm'den daha da 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ş ortaklığı yaptı. Workspace'in çok platformlu ekibi, derleyiciler ve derleyiciler oluşturma ve optimize etme konusunda önemli bir uzmanlığa sahiptir. Workspace'in bir parçası olan E-Tablolar, WasmGC'yi değerlendirmek için ideal bir aday olarak belirlendi: Performansa duyarlı olan E-Tablolar, güçlü performans ve doğruluk doğrulama mekanizmalarına sahiptir. Chrome'da, WasmGC çalışma zamanını oluşturup optimize eden V8 ekibinin yanı sıra önceden derleme (AOT) optimizasyonları oluşturmak için Binaryen'e katkıda bulunanlar vardır. Chrome ve Workspace, WasmGC araç zinciri oluşturmak ve optimize etmek için gereken tüm uzmanlığı sunar. Google E-Tablolar ise ideal bir test ortamıdır.
İlk prototip
2021'in ortalarına kadar ekipler, çalışan bir Java'dan WasmGC derleyicisi oluşturdu. Aynı yılın sonlarına doğru, Google E-Tablolar'ın WasmGC olarak çalışan ve hesaplama yapan bir prototip sürümü vardı. Bu süreçte birçok zorlukla karşılaştılar. Profil oluşturma ve yığın dökümleri alma araçları mevcut değildi ve oluşturulması gerekiyordu. Mevcut uygulama, WasmGC için değiştirilmesi veya yazılması gereken birçok JavaScript kitaplığına dayanıyordu. Wasm hesaplama motorunun doğruluğunu doğrulamak, spesifikasyonun, derleyicinin ve yeni kitaplıkların deneysel yapısı nedeniyle zaman alıcı bir çabaydı. Ancak E-Tablolar'ın doğrulama mekanizmaları bir kez daha son derece faydalı oldu. Ekipler sonunda tüm bunları çalıştırmayı başardı ve performans verileri 2022'nin başlarında gelmeye başladı.
Ek optimizasyonlar
E-Tablolar Wasm'in ilk sürümünde, hesaplama performansı JavaScript'e kıyasla yaklaşık iki kat daha yavaştı. Ancak bu, yeni bir spesifikasyon, yeni bir derleyici ve birkaç yeni kitaplık için kötü bir sonuç değildir. Bu noktadan itibaren E-Tablolar ekibi optimizasyon yapmaya başladı. Buldukları optimizasyonlar birkaç kategoride toplandı:
- Java Sanal Makinesi (JVM) ve V8'de zaten mevcut olan temel optimizasyonları kopyalamak.
- Yüksek oranda optimize edilmiş tarayıcı API'lerini kullanma
- JavaScript'e özgü kodlama kalıplarını kaldırma
Öncelikle E-Tablolar ekibinin, diğer araç zincirlerinde zaten mevcut olan optimizasyonları kopyalaması gerekiyordu. Bunun en iyi örneği, JVM ve V8 tarafından uzun süredir optimize edilen ancak WasmGC için hiçbir şeyin bulunmadığı sanal yöntem dağıtımını optimize etmektir. Çok yaygın iki optimizasyon olan spekülatif satır içi yerleştirme ve sanallaştırma'nın uygulanması, Chrome'da hesaplama süresini yaklaşık% 40 hızlandırdı.
İkinci olarak, tarayıcı API'lerinin Wasm kullanılarak rekabet etmenin zor olduğu optimize edilmiş yerel uygulamalar tarafından desteklendiği durumlar vardır. Dize ve normal ifadeler buna iyi birer örnektir. Özellikle normal ifadeler söz konusu olduğunda ekip, re2j'den (WasmGC'ye derlenmiş) Chrome'daki RegExp
tarayıcı API'sine geçerken normal ifade işlemlerinin yaklaşık 100 kat hızlandığını gördü. Bu API, her normal ifadeyi kendi makine koduna derleyebilir.
Son olarak, yıllar süren optimizasyonların kod tabanının JavaScript'e aşırı uyum sağlamasına neden olduğunu fark ettiler. Örneğin, E-Tablolar'da diziler ile haritalar arasındaki çizgileri bulanıklaştıran bir temel veri yapısı vardı. Bu yöntem, seyrek dizileri otomatik olarak harita olarak modelleyen JavaScript'de verimlidir ancak diğer platformlarda yavaştır. Bu nedenle, kodu platformdan bağımsız bir şekilde yeniden yazmaları gerekiyordu. Ekibin WebAssembly'den hoşlandığı bir diğer özellik de çok platformlu uygulamaların web'de iyi performans elde etmesini kolaylaştırmasıdır. Uygulamanızın tamamını JavaScript'in özelliklerine göre değiştirmeniz gerekmez.
Nihai sonuç
Tüm bu optimizasyonlardan sonra, E-Tablolar'ın nihai WasmGC sürümü yaklaşık JavaScript'ten iki kat daha hızlı bir hesaplama performansı elde eder. Bu, ilk WasmGC sürümünün başlangıç noktasına kıyasla dört katlık bir iyileşme anlamına gelir.
Sonuç
WasmGC, geliştiricilerin web uygulamaları oluşturma şeklini iyileştirme potansiyeline sahip güçlü bir teknolojidir. Google olarak önümüzdeki yıllarda WasmGC'nin paylaşılan bellek çoklu iş parçacığını desteklemek ve tek iş parçacıklı performansı daha da artırmak için ilerlemesini umuyoruz. Tüm web geliştiricilerin, bir sonraki yüksek performanslı projeleri için WasmGC'yi kullanmayı değerlendirmesini öneririz. Bize katılın ve web'i birlikte daha hızlı ve sorunsuz bir yer haline getirelim.
Teşekkür ederiz
WasmGC uygulaması ve bu örnek olay üzerinde çalışanlara teşekkür ederiz: Diwas Adhikary, Matthew Albright, Ksenia Bukina, Julien Dramaix, Asim Fazal, Michael Frederick, Goktug Gokdogan, Janice Gu, Adam Klein, Manos Koukoutos, Jakob Kummerow, Matthias Liedtke, Thomas Lively, Roberto Lublinerman, Vishrut Mehta, Thomas Nattestad, Josh Pearlstein, Joaquim Perotti, Chris Ruenes, Steven Saviano, Derek Schuff, Tim Sears, Michael Thomas, Yuan Tian, Philipp Weis, Mason Wu, Alon Zakai ve Emanuel Ziegler.