So ist Google Earth jetzt im Web verfügbar

Verbesserung des browserübergreifenden Zugriffs auf Google Earth mit WebAssembly

Jordon Mears
Jordon Mears

In einer idealen Welt wäre jede von Entwicklern erstellte Anwendung unabhängig von der Technologie im Browser verfügbar. Es gibt jedoch Hürden, die die Bereitstellung von Projekten im Web erschweren. Diese Hürden hängen davon ab, mit welcher Technologie die Projekte erstellt wurden und wie gut diese Technologie von den verschiedenen Browseranbietern unterstützt wird. WebAssembly (Wasm) ist ein vom W3C standardisiertes Kompilierungsziel, mit dem wir dieses Problem lösen können, da wir Codebases aus anderen Sprachen als JavaScript im Web ausführen können.

Genau das haben wir mit Google Earth getan, das jetzt als Vorab-Betaversion mit WebAssembly verfügbar ist. Beachten Sie, dass dies noch eine Betaversion von Google Earth ist und möglicherweise nicht so reibungslos funktioniert wie gewohnt. Sie können auch die normale Webversion von Google Earth ausprobieren. Ihr könnt die Betaversion in Chrome und anderen Chromium-basierten Browsern wie Edge (Canary-Version), Opera und Firefox verwenden. Diese Betaversion kann Ihnen als Inspiration dienen, wenn Sie auch nach einer besseren browserübergreifenden Unterstützung für Ihre plattformspezifischen Anwendungen suchen.

Warum wir WebAssembly für Google Earth ausgewählt haben

Ursprünglich wurde der Großteil von Google Earth in C++ geschrieben, da es sich um eine Desktopanwendung handelte, die installiert werden sollte. Als Smartphones auf den Markt kamen, konnten wir die Anwendung auf Android und iOS portieren und dabei den Großteil unserer C++-Codebasis mithilfe von NDK und Objective-C++ beibehalten. 2017 haben wir Earth im Web eingeführt und dabei den Native Client (NaCl) verwendet, um den C++-Code zu kompilieren und im Chrome-Browser auszuführen.

NaCl war damals die einzige Browsertechnologie, mit der wir unseren C++-Code in den Browser portieren und die Leistung erzielen konnten, die für Google Earth erforderlich war. Leider war NaCl eine reine Chrome-Technologie, die nie in anderen Browsern eingesetzt wurde. Jetzt wechseln wir zu WebAssembly, mit dem wir denselben Code in allen Browsern ausführen können. So wird Earth für mehr Nutzer im Web verfügbar sein.

Ein Screenshot von Google Earth mit dem Eiffelturm

Ein Thread zu Threads

WebAssembly befindet sich noch in der Entwicklungsphase und Browser werden ständig um weitere Funktionen erweitert. Aus der Sicht von Google Earth ist der größte Unterschied bei der Unterstützung von WebAssembly zwischen den Browsern die Unterstützung von Threads. Einige Browser unterstützen Multithreading, andere nicht. Stellen Sie sich die Erde als riesiges 3D-Videospiel der realen Welt vor. Daher streamen wir ständig Daten an den Browser, dekomprimieren sie und bereiten sie für das Rendern auf dem Bildschirm vor. Da diese Arbeit jetzt in einem Hintergrund-Thread ausgeführt wird, konnte die Leistung von Google Earth im Browser deutlich verbessert werden.

Mehrere Threads in WebAssembly beruhen auf einer Browserfunktion namens SharedArrayBuffer, die nach Bekanntwerden der Sicherheitslücken Spectre und Meltdown aus Browsern entfernt wurde. Um potenzielle Schäden durch Angriffe zu minimieren, hat das Chrome-Sicherheitsteam die Website-Isolierung in Chrome für alle Desktop-Betriebssysteme eingeführt. Bei der Website-Isolierung ist jeder Renderingprozess auf Dokumente einer einzelnen Website beschränkt. Mit dieser Sicherheitsfunktion hat Chrome SharedArrayBuffer für den Desktop wieder aktiviert. So konnten wir mehrstufiges WebAssembly mit Earth für Chrome verwenden.

Andere Browser arbeiten an der Website-Isolierung oder anderen Abhilfemaßnahmen, um SharedArrayBuffer wieder zu aktivieren. In der Zwischenzeit wird Earth in diesen Browsern nur mit einem Thread ausgeführt.

Funktionsweise von WebAssembly in verschiedenen Browsern

Wir haben viel über den Stand der WebAssembly-Unterstützung in Browsern gelernt, die Earth portieren. Wenn Sie Anwendungen mit WebAssembly entwickeln möchten, ist es wichtig, den aktuellen Stand der WebAssembly-Unterstützung in verschiedenen Browsern zu kennen.

Edge

Da Microsoft den EdgeHTML-Rendering-Motor auf einen Chromium-basierten Rendering-Motor umstellt, wird es bald zwei verschiedene Entwicklungsumgebungen für Edge geben. Derzeit kann die Google Earth-Betaversion auf WebAssembly auf der aktuellen öffentlichen Version von Edge nicht ausgeführt werden, da WebGL2 nicht unterstützt wird. Das Problem wird behoben, sobald die neue Chromium-basierte Version von Edge in naher Zukunft veröffentlicht wird. In der Zwischenzeit können Sie die Canary-Version von Edge herunterladen und feststellen, dass Earth dort recht gut funktioniert.

Chrome

Chrome unterstützt WebAssembly umfassend, einschließlich Multithreading auf dem Computer. Daher sollte Google Earth flüssiger laufen. Wir freuen uns jedoch darauf, dass Chrome die Unterstützung für die dynamische Speicherzuweisung mit Multithreading in WebAssembly hinzufügt. Bis dahin kann es sein, dass Earth auf Geräten mit wenig Arbeitsspeicher (z. B. 32-Bit-Computern) nicht gestartet werden kann.

Firefox

Firefox bietet eine gute Unterstützung für WebAssembly, hat aber die Unterstützung für Multithreading deaktiviert. Daher kann es zu Leistungseinbußen bei Google Earth kommen. Wir hoffen, dass Mozilla die Unterstützung für Multithreading in zukünftigen Versionen wieder einführt. Der Vorteil ist, dass Firefox die dynamische Speicherzuweisung unterstützt.

Opera

Opera basiert ebenso wie Chrome und zukünftige Versionen von Edge auf Chromium. Die aktuelle Version von Opera bietet jedoch nur Unterstützung für WebAssembly mit einem einzelnen Thread. Earth funktioniert in Opera, die Leistung ist jedoch etwas eingeschränkt. Hoffentlich werden in neueren Versionen von Opera Multithreading und eine robustere WebAssembly-Unterstützung implementiert.

Safari

Safari bietet eine gute Implementierung von WebAssembly, unterstützt aber WebGL2 nicht vollständig. Daher wird Earth mit WebAssembly in Safari nicht ausgeführt. Insbesondere benötigen einige unserer Shader GLSL 1.2. Wir hoffen, dass Google Earth auch in Safari verfügbar sein wird, sobald WebGL2 besser unterstützt wird.

Wir freuen uns auf eine weitere Verbreitung von WebAssembly-Funktionen

Es war ein langer Weg, bis wir Google Earth im Web anbieten konnten. Vor etwa sechs Jahren haben wir mit einer ersten internen asm.js-basierten Demo begonnen, die im Laufe der Jahre gepflegt und erweitert wurde. Es wurde dann in eine WebAssembly-Version von Earth konvertiert, da WebAssembly zum von W3C anerkannten Standard wurde.

Wir haben noch viel zu tun, um WebAssembly und Earth weiterzuentwickeln. Insbesondere möchten wir das LLVM-Backend mit Emscripten (der Toolchain zum Generieren von WebAssembly aus C++-Code) verwenden. Diese Änderung ermöglicht die zukünftige SIMD-Unterstützung sowie leistungsstärkere Debugging-Tools wie Quellkarten für Code in der Quellsprache. Wir hoffen außerdem, dass OffscreenCanvas eingeführt und die dynamische Speicherzuweisung in WebAssembly vollständig unterstützt wird. Wir sind jedoch überzeugt, dass wir auf dem richtigen Weg sind: WebAssembly ist die langfristige Zukunft von Google Earth im Web.

Bitte nehmen Sie sich einen Moment Zeit, um unsere beta auszuprobieren. Lasst uns wissen, wie es funktioniert, indem ihr direkt in Google Earth Feedback gebt.