WebAssembly ile Google Earth'e tarayıcılar arası erişimi iyileştirme.
İdeal bir dünyada, geliştiricilerin teknolojiden bağımsız olarak oluşturduğu her uygulama tarayıcıda kullanılabilir. Ancak projelerin web'e taşınması, oluşturuldukları teknolojiye ve bu teknolojinin çeşitli tarayıcı tedarikçileri tarafından ne kadar iyi desteklenmesine bağlı olarak engellere tabidir. WebAssembly (Wasm), W3C tarafından standartlaştırılmış bir derleme hedefidir. JavaScript dışındaki dillerdeki kod tabanlarını web'de çalıştırmamıza olanak tanıyarak bu sorunu çözmemize yardımcı olur.
Google Earth'ü WebAssembly'de önizleme beta sürümünde kullanıma sunarak bunu başardık. Bu sürümün henüz Google Earth'in beta sürümünde olduğunu ve alıştığınız kadar sorunsuz olmayabileceğini unutmayın (normal web için Earth'ü deneyin). Beta sürümünü Chrome'da ve Edge (Canary sürümü), Opera ve Firefox gibi Chromium tabanlı diğer tarayıcılarda deneyebilirsiniz. Platforma özel uygulamalarınız için daha iyi tarayıcılar arası destek arıyorsanız bu beta sürümden ilham alabilirsiniz.
Google Earth için WebAssembly'i neden tercih ettik?
Google Earth'ün büyük bir kısmını, yüklenmek üzere tasarlanmış bir masaüstü uygulaması olduğu için C++'da yazdık. Ardından, akıllı telefonlar yaygınlaştıkça C++ kod tabanımızın büyük bir kısmını koruyarak NDK ve Objective-C++'yi kullanarak Android ve iOS'e taşıyabildik. 2017'de Earth'ü web'e getirirken C++ kodunu derlemek ve Chrome tarayıcıda çalıştırmak için Native Client'i (NaCl) kullandık.
O zamanlar NaCl, C++ kodumuzu tarayıcıya taşımamıza ve Earth'a ihtiyaç duyduğu performansı sunmamıza olanak tanıyan tek tarayıcı teknolojisiydi. Maalesef NaCl, tarayıcılarda hiçbir zaman kullanılmayan, yalnızca Chrome'a özel bir teknolojiydi. Artık aynı kodu alıp tarayıcılarda çalıştırmamıza olanak tanıyan WebAssembly'e geçmeye başlıyoruz. Bu sayede, Earth'a web'de daha fazla kişi erişebilecek.
Mesaj dizileri hakkında bir ileti dizisi
WebAssembly standart olarak gelişmeye devam ediyor ve tarayıcılar daha fazla özellik ve işlevle genişletilmeye devam ediyor. Earth açısından, tarayıcılar arasındaki WebAssembly desteğindeki en önemli fark, mesaj dizileri desteğidir. Bazı tarayıcılar çoklu iş parçacığı desteği sunar, bazıları ise sunmaz. Earth'ü gerçek dünyanın dev bir 3D video oyunu gibi düşünebilirsiniz. Bu nedenle, verileri tarayıcıya sürekli olarak aktarıyor, sıkıştırmasını kaldırıyor ve ekranda oluşturulmaya hazır hale getiriyoruz. Bu işlemi arka plan iş parçacığında yapabilmek, tarayıcıda Earth'ün performansında belirgin bir iyileşme sağladı.
Çok iş parçacıklı WebAssembly, Spectre ve Meltdown güvenlik açıkları ortaya çıktıktan sonra tarayıcılardan kaldırılan SharedArrayBuffer adlı bir tarayıcı özelliğine dayanır. Chrome'un güvenlik ekibi, saldırılardan kaynaklanabilecek olası hasarları azaltmak için tüm masaüstü işletim sistemlerinde Chrome'a Site İzolasyonu'nu ekledi. Site izolasyonu, her oluşturma işlemini tek bir sitedeki dokümanlarla sınırlandırır. Bu güvenlik özelliğinin uygulanmasıyla Chrome, masaüstü için SharedArrayBuffer'ı yeniden etkinleştirdi. Bu sayede Chrome için Earth'te çok iş parçacıklı WebAssembly'i kullanabildik.
Diğer tarayıcılar, SharedArrayBuffer'ı yeniden etkinleştirmek için Site İzolasyonu veya diğer azaltıcı önlemler üzerinde çalışıyor. Bu süre zarfında Earth, söz konusu tarayıcılarda tek iş parçacıklı olarak çalışır.
WebAssembly farklı tarayıcılarda 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'in farklı tarayıcılarda nasıl çalıştığıyla ilgili mevcut durumu anlamak önemlidir.
Edge
Microsoft'un EdgeHTML oluşturma aracından Chromium tabanlı bir oluşturma aracına geçme tercihine bağlı olarak Edge, iki farklı geliştirme deneyimine dönüşmek üzere. WebAssembly'deki Google Earth beta sürümü, WebGL2 desteğinin olmaması nedeniyle şu anda Edge'in herkese açık sürümünde çalışmıyor. Bu sorun, Chromium tabanlı Edge'in yeni sürümü yakın gelecekte kullanıma sunulduğunda düzeltilecektir. Bu süre zarfında Edge'in Canary sürümünü indirebilir ve Earth'ün oldukça iyi çalıştığını görebilirsiniz.
Chrome
Chrome, masaüstünde çoklu iş parçacığı işleme dahil olmak üzere WebAssembly için güçlü bir destek sunar. Bu sayede Earth'ün daha sorunsuz çalıştığını görebilirsiniz. Ancak Chrome'un WebAssembly'de çoklu iş parçacığı ile dinamik bellek ayırma desteği eklemesini sabırsızlıkla bekliyoruz. O zamana kadar Earth, sınırlı miktarda belleği olan cihazlarda (ör. 32 bit makineler) başlatılamayabilir.
Firefox
Firefox, WebAssembly için iyi bir destek sunar ancak çoklu iş parçacığı desteğini devre dışı bırakmıştır. Sonuç olarak, Earth'ta daha yavaş bir deneyim yaşayabilirsiniz. Mozilla'nın gelecek sürümlerde çoklu iş parçacığı desteğini geri getirmesini umuyoruz. Ancak Firefox dinamik bellek ayırmayı destekler.
Opera
Opera, Chrome'un yanı sıra Edge'in gelecekteki sürümleri gibi Chromium'a dayanır. Ancak Opera'nın mevcut sürümü yalnızca tek iş parçacıklı WebAssembly desteği sunar. Earth, Opera'da çalışır ancak deneyim biraz daha düşüktür. Opera'nın yeni sürümlerinde çoklu iş parçacığı ve daha güçlü WebAssembly desteğinin olacağını umuyoruz.
Safari
Safari'de WebAssembly güçlü bir şekilde uygulanmış olsa da WebGL2 tam olarak desteklenmemektedir. Bu nedenle, WebAssembly ile Earth Safari'de çalışmaz. Özellikle bazı gölgelendiricilerimiz için GLSL 1.2 gerekir. WebGL2 için daha iyi destek eklendikten sonra Earth'in Safari'de de kullanılabileceğini umuyoruz.
WebAssembly özelliklerinin daha fazla benimsenmesini bekliyoruz
Earth'ü web'de kullanıma sunmak için uzun bir yol kat ettik. Yaklaşık altı yıl önce, yıllar içinde sürdürülen ve genişletilen ilk asm.js tabanlı şirket içi bir demoyla başladık. Daha sonra WebAssembly, W3C tarafından kabul edilen standart haline geldiği için Earth'in WebAssembly derlemesine dönüştürüldü.
WebAssembly ve Earth için daha gidilecek çok yolumuz var. Daha açık belirtmek gerekirse, Emscripten'i (C++ kodundan WebAssembly oluşturmak için kullanılan araç zinciri) kullanarak LLVM arka ucuna geçmek istiyoruz. Bu değişiklik, gelecekte SIMD desteğinin yanı sıra kaynak dil kodu için kaynak haritalar gibi daha güçlü hata ayıklama araçlarının kullanılmasını sağlayacaktır. OffscreenCanvas'ın benimsenmesi ve WebAssembly'de dinamik bellek ayırma için tam destek de görmeyi umduğumuz diğer özellikler arasında yer alıyor. Ancak doğru yolda olduğumuzu biliyoruz: WebAssembly, web'deki Earth'ün uzun vadeli geleceğidir.
Lütfen beta sürümümüzü deneyin. Doğrudan Earth'ta geri bildirim bırakarak bu özelliğin sizin için nasıl çalıştığını bize bildirin.