Como estamos disponibilizando o Google Earth na Web

Melhoria do acesso ao Google Earth entre navegadores com o WebAssembly.

Jordon Mears
Jordon Mears

Em um mundo ideal, todos os aplicativos criados pelos desenvolvedores, independentemente da tecnologia, estariam disponíveis no navegador. Mas existem barreiras para levar projetos para a Web, dependendo da tecnologia com a qual foram criados e da qualidade do suporte que essa tecnologia tem aos vários fornecedores de navegadores. O WebAssembly (Wasm) é um destino de compilação padronizado pelo W3C (link em inglês) que nos ajuda a resolver esse problema, permitindo executar bases de código de outras linguagens além do JavaScript na Web.

Fizemos exatamente isso com o Google Earth, disponível hoje na versão Beta da 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 simples quanto você está acostumado. Faça um teste com o Google Earth para Web comum. Você pode testar essa versão Beta no Chrome e em outros navegadores baseados no Chromium, incluindo o Edge (versão Canary), o Opera e o Firefox. Considere esta versão beta como sua inspiração se você também estiver procurando uma melhor compatibilidade entre navegadores para seus aplicativos específicos de plataforma.

Por que escolhemos o WebAssembly para o Google Earth

Originalmente, escrevemos a maior parte do Google Earth em C++ porque ele era um aplicativo de computador para instalação. Depois, pudemos fazer a portabilidade para o Android e o iOS conforme os smartphones se consolidavam, retendo a maior parte da nossa base de código C++ usando NDK e Objective-C++. Em 2017, quando lançamos o Earth para a Web, usamos o Native Client (NaCl) para compilar o código C++ e executá-lo no navegador Chrome.

NaCl era a única tecnologia de navegador que nos permitia fazer a portabilidade do nosso código C++ para o navegador e fornecer o tipo de desempenho que o Earth precisava. Infelizmente, o NaCl era uma tecnologia exclusiva do Chrome que nunca foi adotada em todos os navegadores. Agora estamos mudando para o WebAssembly, que permite executar esse mesmo código em todos os navegadores. Isso significa que o Earth ficará disponível para mais pessoas na Web.

Uma captura de tela da Terra mostrando a Torre Eiffel

Uma conversa sobre linhas de execução

O WebAssembly ainda está evoluindo como padrão, e os navegadores continuam a ser estendidos com mais recursos e funcionalidades. Do ponto de vista da Terra, a diferença mais significativa no suporte para WebAssembly entre navegadores é o suporte para as linhas de execução. Alguns navegadores oferecem suporte a multithreading e outros não. Pense na Terra como um grande videogame em 3D do mundo real. Dessa forma, estamos constantemente transmitindo dados para o navegador, descompactando-o e preparando-o para renderização na tela. A possibilidade de fazer esse trabalho em uma linha de execução em segundo plano mostrou uma clara melhoria no desempenho do Earth no navegador.

O WebAssembly com multithreading depende de um recurso de navegador chamado SharedArrayBuffer, que foi extraído dos navegadores depois que as vulnerabilidades de segurança Spectre e Meltdown foram descobertas. Para reduzir possíveis danos causados por ataques, a equipe de segurança do Chrome lançou 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 ativado, o Chrome reativou o SharedArrayBuffer para computador, o que nos permitiu usar o WebAssembly com várias linhas de execução com o Earth para Chrome.

Outros navegadores estão trabalhando no isolamento de sites ou em outras mitigações para reativar o SharedArrayBuffer. Enquanto isso, o Earth executa uma única linha de execução nesses navegadores.

Como o WebAssembly funciona com diferentes navegadores

Aprendemos muito sobre o estado do suporte do WebAssembly nos navegadores que estão adaptando o Earth. Se você for desenvolver aplicativos usando o WebAssembly, é importante entender o estado atual do funcionamento do WebAssembly com navegadores diferentes.

Borda

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 baseado no Chromium. No momento, a versão Beta do Google Earth no WebAssembly não será executada na versão pública atual do Edge devido à falta de suporte para 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 ver que o Earth funciona muito bem.

Chrome

O Chrome tem suporte completo para o WebAssembly, incluindo o multithreading em computadores. Por isso, o Earth funciona melhor. No entanto, esperamos que o Chrome adicione suporte à alocação dinâmica de memória com multithreading no WebAssembly. Até lá, talvez não seja possível iniciar o Earth em dispositivos com quantidades limitadas de memória, como máquinas de 32 bits.

Firefox

O Firefox oferece um bom suporte para o WebAssembly, mas desativou o suporte para multithreading. Por isso, a experiência com a Terra vai ficar mais lenta. Esperamos que o Mozilla volte a oferecer suporte a multithreading em versões futuras. Por outro lado, o Firefox suporta a alocação de memória dinâmica.

Ópera

O Opera é baseado no Chromium, assim como o Chrome, junto com as próximas versões do Edge. No entanto, a versão atual do Opera só oferece suporte para WebAssembly com thread único. O Earth é executado no Opera, mas com uma experiência um pouco degradada. Esperamos que as versões mais recentes do Opera ofereçam suporte a multithreading e um suporte mais robusto para WebAssembly.

Safari

O Safari tem uma implementação robusta de WebAssembly, mas não tem suporte total para WebGL2. Por isso, o Earth com WebAssembly não pode ser executado no Safari. Especificamente, alguns dos nossos sombreadores exigem GLSL 1.2. Esperamos que o Google Earth também esteja disponível no Safari, assim que o suporte para WebGL2 for aprimorado.

Espero que haja mais adoção dos recursos do WebAssembly

A disponibilização do Earth na Web tem sido um longo caminho. Há cerca de seis anos, começamos com uma demonstração interna inicial baseada em asm.js, que foi mantida e expandida ao longo dos anos. Ele foi então convertido em um build do WebAssembly do Earth, quando o WebAssembly se tornou o padrão adotado pelo W3C.

Ainda temos opções para migrar para o WebAssembly e o Earth. Especificamente, queremos migrar para o back-end do LLVM usando o Emscripten, o conjunto de ferramentas para gerar o WebAssembly a partir do código C++. Essa mudança vai permitir o suporte futuro a SIMD, bem como ferramentas de depuração mais eficazes, como mapas de origem para código no idioma de origem. Outras coisas que esperamos ver são a adoção de OffscreenCanvas e o suporte completo para alocação de memória dinâmica no WebAssembly. Mas sabemos que estamos no caminho certo: o WebAssembly é o futuro a longo prazo do Earth na Web.

Reserve um momento para testar nossa versão Beta. Deixe seu feedback diretamente no Earth e informe se ele atende às suas necessidades.