Melhoria do acesso ao Google Earth em vários navegadores com o WebAssembly.
Em um mundo ideal, todos os aplicativos criados pelos desenvolvedores, independentemente da tecnologia, estariam disponíveis no navegador. No entanto, há barreiras para levar projetos para a Web, dependendo da tecnologia usada para criar os projetos e da compatibilidade deles com os vários fornecedores de navegadores. O WebAssembly (Wasm) é um destino de compilação padronizado pelo W3C que ajuda a resolver esse problema, permitindo a execução de bases de código de linguagens diferentes do JavaScript na Web.
Fizemos isso com o Google Earth, que está disponível hoje na pré-visualização Beta no WebAssembly. Lembre-se de que esta ainda é uma versão Beta do Google Earth e pode não ser tão suave quanto você está acostumado. Experimente o Google Earth para Web. É possível usar a versão Beta no Chrome e em outros navegadores baseados no Chromium, incluindo o Edge (versão Canary), o Opera e o Firefox. Use essa versão Beta como inspiração se você também estiver procurando um melhor suporte a vários navegadores para seus aplicativos específicos da plataforma.
Por que escolhemos o WebAssembly para o Google Earth
Originalmente, criamos a maior parte do Google Earth em C++ porque ele era um aplicativo para computador destinado a ser instalado. Depois, conseguimos fazer a portabilidade para Android e iOS à medida que os smartphones se popularizaram, mantendo a maior parte da nossa base de código C++ usando o NDK e o Objective-C++. Em 2017, quando trouxemos o Earth para a Web, usamos o Native Client (NaCl) para compilar o código C++ e executá-lo no navegador Chrome.
Naquela época, o NaCl era a única tecnologia de navegador que permitia portar nosso código C++ para o navegador e oferecer o tipo de desempenho que a Earth precisava. Infelizmente, o NaCl era uma tecnologia exclusiva do Chrome que nunca foi adotada em outros navegadores. Agora estamos começando a mudar para o WebAssembly, que permite que usemos esse mesmo código e o executemos em vários navegadores. Isso significa que o Earth vai estar disponível para mais pessoas na Web.
Uma linha de execução sobre linhas de execução
O WebAssembly ainda está evoluindo como um padrão, e os navegadores continuam sendo ampliados com mais recursos e funcionalidades. Do ponto de vista do Earth, a diferença mais significativa no suporte ao WebAssembly entre os navegadores é o suporte à linha de execução. Alguns navegadores oferecem suporte a várias linhas de execução, mas outros não. Pense na Terra como um enorme videogame 3D do mundo real. Por isso, estamos sempre transmitindo dados para o navegador, descompactando-os e preparando-os para renderização na tela. A capacidade de fazer esse trabalho em uma linha de execução em segundo plano mostrou uma melhoria clara na performance do Earth no navegador.
O WebAssembly com várias linhas de execução depende de um recurso do navegador chamado SharedArrayBuffer, que foi retirado dos navegadores após a revelação das vulnerabilidades de segurança Spectre e Meltdown. Para reduzir os possíveis danos causados por ataques, a equipe de segurança do Chrome apresentou o isolamento de sites no Chrome para todos os sistemas operacionais de computador. O isolamento de sites limita cada processo de renderizador a documentos de um único site. Com esse recurso de segurança em vigor, o Chrome reativou o SharedArrayBuffer para computadores, o que nos permitiu usar o WebAssembly multithread com o Earth para Chrome.
Outros navegadores estão trabalhando no isolamento de site ou em outras mitigações para reativar o SharedArrayBuffer. Enquanto isso, o Earth é executado em um único thread nesses navegadores.
Como o WebAssembly funciona com diferentes navegadores
Aprendemos muito sobre o estado do suporte ao WebAssembly em navegadores que fazem a portabilidade do Earth. Se você for desenvolver aplicativos usando o WebAssembly, é importante entender o estado atual de como o WebAssembly funciona com diferentes navegadores.
Edge
O Edge está prestes a se tornar duas experiências de desenvolvimento distintas com base na escolha da Microsoft de migrar do renderizador EdgeHTML para um renderizador baseado no Chromium. No momento, a versão Beta do Google Earth no WebAssembly não é executada na versão pública atual do Edge devido à falta de suporte ao WebGL2. Isso será corrigido quando a nova versão do Edge, baseada no Chromium, for lançada em breve. Enquanto isso, você pode fazer o download da versão Canary do Edge e conferir se o Google Earth funciona bem.
Chrome
O Chrome tem suporte avançado para o WebAssembly, incluindo a execução de várias linhas de execução em computadores. Por isso, o Google Earth vai funcionar de maneira mais suave. No entanto, esperamos que o Chrome adicione suporte à alocação de memória dinâmica com várias linhas de execução no WebAssembly. Até lá, o Earth pode não ser iniciado em dispositivos com quantidades limitadas de memória (como máquinas de 32 bits).
Firefox
O Firefox oferece bom suporte ao WebAssembly, mas desativou o suporte a multithreading. Como resultado, a experiência com o Earth pode ficar mais lenta. Esperamos que a Mozilla volte a oferecer suporte à utilização de várias linhas de execução em versões futuras. Por outro lado, o Firefox oferece suporte à alocação de memória dinâmica.
Opera
O Opera é baseado no Chromium, assim como o Chrome, e nas próximas versões do Edge. No entanto, a versão atual do Opera só oferece suporte de linha de execução única ao WebAssembly. O Google Earth funciona no Opera, mas com uma experiência um pouco degradada. Esperamos que as versões mais recentes do Opera tenham suporte à utilização de várias linhas de execução e suporte mais robusto ao WebAssembly.
Safari
O Safari tem uma implementação forte do WebAssembly, mas não tem suporte total para o WebGL2. Portanto, o Earth com WebAssembly não é executado no Safari. Especificamente, alguns dos nossos shaders exigem o GLSL 1.2. Esperamos que o Earth também esteja disponível no Safari assim que o suporte à WebGL2 for melhorado.
Esperamos que mais recursos do WebAssembly sejam adotados
Foi um longo caminho para disponibilizar o Earth na Web. Há cerca de seis anos, começamos com uma demonstração interna baseada em asm.js que foi mantida e ampliada ao longo dos anos. Ele foi convertido em um build do WebAssembly do Earth, já que o WebAssembly se tornou o padrão adotado pelo W3C.
Ainda temos um longo caminho a percorrer com o WebAssembly e o Earth. Mais especificamente, gostaríamos de migrar para o back-end LLVM usando o Emscripten (o conjunto de ferramentas para gerar WebAssembly a partir de código C++). Essa mudança vai permitir o suporte futuro a SIMD, além de ferramentas de depuração mais eficientes, como mapas de origem para código de idioma de origem. Esperamos também a adoção de OffscreenCanvas e suporte total para a alocação de memória dinâmica no WebAssembly. Mas sabemos que estamos no caminho certo: o WebAssembly é o futuro de longo prazo do Earth na Web.
Teste nossa beta. Envie seu feedback diretamente no Google Earth para nos contar como ele funciona para você.