WebAssembly ile Google Earth'e tarayıcılar arası erişimi iyileştirme.
İdeal bir dünyada, geliştiricilerin oluşturduğu her uygulama teknolojiden bağımsız olarak tarayıcıda kullanılabilir. Ancak, oluşturuldukları teknolojiye ve bu teknolojinin çeşitli tarayıcı tedarikçileri tarafından ne kadar iyi desteklendiğine bağlı olarak, projeleri web'e taşımanın önündeki engeller vardır. WebAssembly (Wasm), W3C tarafından standartlaştırılmış bir derleme hedefidir. Web'de JavaScript dışındaki dillerden kod tabanları çalıştırmamıza olanak tanıyarak bu sorunu çözmemize yardımcı olur.
Tam da bunu, bugün WebAssembly'de önizleme beta sürümünde kullanıma sunulan Google Earth ile yaptık. Bunun hâlâ Google Earth beta sürümü olduğunu ve alışkın olduğunuz kadar sorunsuz olmayabileceğini unutmayın (normal olarak Web için Google Earth'ü deneyin). Bu beta sürümünü Chrome'un yanı sıra Edge (Canary sürümü) ve Opera dahil olmak üzere diğer Chromium tabanlı tarayıcılarda ve Firefox'ta deneyebilirsiniz. Platforma özgü uygulamalarınız için tarayıcılar arası daha iyi destek arıyorsanız bu beta programı siz de esin kaynağı olarak düşünün.
Google Earth için neden WebAssembly'yi seçtik?
Google Earth'ün büyük bir kısmını C++ dilinde yazmıştık, çünkü bu uygulama yüklenmeye yönelik bir masaüstü uygulamasıydı. Daha sonra, akıllı telefonlar ele geçirildiğinde Android ve iOS'a taşıyabildik ve NDK ve Objective-C++ kullanan C++ kod tabanımızın çoğunu koruduk. 2017'de Earth'ü web'e getirdiğimizde, C++ kodunu derleyip Chrome tarayıcısında çalıştırmak için Native Client'ı (NaCl) kullandık.
O zamanlar NaCl, C++ kodumuzu tarayıcıya taşımamıza ve Earth'ün ihtiyaç duyduğu performansı bize sunmamıza olanak tanıyan tek tarayıcı teknolojisiydi. Ne yazık ki NaCl, yalnızca Chrome'da bulunan ve tarayıcılarda hiç benimsenmemiş bir teknolojiydi. Şimdi de aynı kodu alıp tarayıcılar arasında çalıştırmamızı sağlayan WebAssembly'ye geçiş yapıyoruz. Bu, Earth'ün web genelinde daha fazla kişi tarafından kullanılabildiği anlamına geliyor.
İleti dizisinde bir mesaj dizisi
WebAssembly standart olarak gelişmeye ve tarayıcılar, daha fazla özellik ve işlevle genişletmeye devam ediyor. Earth açısından bakıldığında, tarayıcılar arasındaki WebAssembly desteğinin en önemli farkı, ileti dizisi desteğidir. Bazı tarayıcılar çoklu iş parçacığı desteği sunarken, diğerleri sunmaz. Dünyayı gerçek dünyanın devasa bir 3D video oyunu gibi düşünün. Bu nedenle, tarayıcıya sürekli olarak veri akışı sağlayıp sıkıştırılmış verileri açıyoruz ve ekranda oluşturulmaya hazır hale getiriyoruz. Bu çalışmayı arka plandaki bir iş parçacığında yapabilmek tarayıcıdaki Earth'ün performansında belirgin bir iyileşme olduğunu göstermiştir.
Çok iş parçacıklı WebAssembly, Spectre ve Meltdown'daki güvenlik açıkları ortaya çıktıktan sonra tarayıcılardan alınan SharedArrayBuffer adlı bir tarayıcı özelliğini kullanır. Saldırılardan kaynaklanabilecek olası zararları azaltmak amacıyla, Chrome güvenlik ekibi tüm masaüstü işletim sistemleri için Chrome'da Site İzolasyonu'nu kullanıma sundu. Site İzolasyonu, her oluşturucu işlemini tek bir sitedeki dokümanlarla sınırlar. Bu güvenlik özelliği sayesinde Chrome, masaüstü için SharedArrayBuffer'ı yeniden etkinleştirdi. Böylece, çok iş parçacıklı WebAssembly'yi Chrome için Earth ile birlikte kullanabildik.
Diğer tarayıcılar, Site İzolasyonu veya diğer çözümler üzerinde çalışıp SharedArrayBuffer'ı yeniden etkinleştirmek için çalışır. Bu süre zarfında, Earth bu tarayıcılarda tek iş parçacıklı olarak çalışmaktadır.
WebAssembly farklı tarayıcılarla nasıl çalışır?
Earth'ü taşıyan tarayıcılarda WebAssembly desteğinin durumu hakkında çok şey öğrendik. WebAssembly kullanarak uygulama geliştirecekseniz WebAssembly'nin farklı tarayıcılarla çalışma durumunun mevcut durumunu anlamanız önemlidir.
Edge
Edge, Microsoft'un EdgeHTML oluşturucusundan Chromium tabanlı bir oluşturucuya geçiş tercihine dayanarak iki ayrı geliştirme deneyimi olma yolundadır. Şu anda WebAssembly'de Google Earth beta sürümü, WebGL2 desteği olmadığından Edge'in herkese açık geçerli sürümünde çalışmamaktadır. Bu sorun, Edge'in Chromium tabanlı yeni sürümü yakın bir gelecekte kullanıma sunulduğunda düzeltilecektir. Bu arada, Edge'nin Canary sürümünü indirerek Earth'ün gayet iyi çalıştığını görebilirsiniz.
Chrome
Chrome, masaüstünde çoklu iş parçacığı işleme dahil olmak üzere WebAssembly'yi güçlü bir şekilde destekler. Dolayısıyla Earth'ün daha düzgün çalışmasını bekleyebilirsiniz. Ancak Chrome'un WebAssembly'de çoklu iş parçacığı kullanarak dinamik bellek ayırma desteği eklemesini sabırsızlıkla bekliyoruz. O zamana kadar Earth, sınırlı miktarda belleği olan cihazlarda (32 bit makineler gibi) başlatılamayabilir.
Firefox
Firefox, WebAssembly için iyi bir destek sunuyor, ancak çoklu iş parçacığı işleme desteğini devre dışı bırakmıştır. Bu nedenle Earth'te daha yavaş bir deneyim yaşayabilirsiniz. Mozilla'nın ileriki sürümlerde çoklu iş parçacığı işleme desteğini tekrar getirmesini umuyoruz. Artı açısından, Firefox dinamik bellek ayırmayı destekler.
Opera
Opera, Chrome'da olduğu gibi Chromium ve Edge'in yeni sürümleri temelinde geliştirilmiştir. Ancak, Opera'nın geçerli sürümü WebAssembly'nin yalnızca tek iş parçacıklı desteğini sunmaktadır. Earth, Opera'da çalışır, ancak deneyimi biraz kötüleşir. Opera'nın yeni sürümlerinde çoklu iş parçacığı desteği ve daha güçlü WebAssembly desteği olacağını umuyoruz.
Safari
Safari'de güçlü bir WebAssembly uygulaması vardır, ancak WebGL2 için tam destek yoktur. Bu nedenle WebAssembly ile Earth, Safari'de çalışmaz. Özellikle, gölgelendiricilerimizden bazıları GLSL 1.2'yi gerektirmektedir. WebGL2 için daha iyi destek eklendikten sonra Earth'ün Safari'de de kullanılabileceğini umuyoruz.
WebAssembly özelliklerinin daha fazla benimsenmesini umuyoruz
Earth'ü web'de kullanılabilir hale getirmek için uzun bir süre çalıştı. Yaklaşık altı yıl önce, asm.js tabanlı ilk dahili bir demo ile başladık. Bu demo, yıllar içinde sürdürülüp genişletildi. Ardından WebAssembly, W3C'nin benimsediği standart haline geldikçe, Earth'ün WebAssembly derlemesine dönüştürüldü.
WebAssembly ve Earth için hâlâ gidilecek yol var. Özellikle, Emscripten'i (WebAssembly'yi C++ kodundan oluşturan araç zinciri) kullanarak LLVM arka ucuna geçmek istiyoruz. Bu değişiklik, gelecekte SIMD desteği sunmanın yanı sıra kaynak dil kodu için kaynak haritaları gibi daha güçlü hata ayıklama araçlarını da etkinleştirecektir. Görmek istediğimiz diğer özellikler arasında OffscreenCanvas benimsenmesi ve WebAssembly'de dinamik bellek ayırma için tam destek bulunmaktadır. Ancak doğru yolda olduğumuzdan eminiz: WebAssembly, web'de Earth için uzun vadeli bir gelecek.
Lütfen birkaç dakikanızı ayırarak beta sürümümüzü deneyin. Doğrudan Earth'te geri bildirim sağlayarak çalışma şeklinizi bize bildirin.