- A equipe do Google Sheets vem colaborando desde o anúncio do uso de WasmGC no Chrome em 2022
- Isso criou um precedente para que os apps do Google rodem em WasmGC
- Problema: JavaScript
- O mecanismo de cálculo do Google Sheets foi originalmente escrito em Java e lançado em 2006, com todos os cálculos sendo feitos no servidor
- Desde 2013, ele passou a rodar no navegador usando JavaScript
- Primeiro com Google Web Toolkit (GWT) e depois com o transpiler de Java para Closure JavaScript (J2CL)
- O mecanismo de cálculo em JavaScript roda em um Web Worker e se comunica com a thread principal por meio de
MessageChannel
- A versão em JavaScript é mais de 3 vezes mais lenta que a versão em Java
- Por que JavaScript é mais lento que Java
- JavaScript é uma linguagem dinâmica e teve seu desempenho melhorado por compiladores JIT, mas ainda tem limitações
- Tipagem frouxa e comportamento dinâmico dificultam a geração de código ideal
- O TypeScript também só facilita o desenvolvimento e não oferece as garantias necessárias para otimização
- Solução: WasmGC
- Uma extensão do WebAssembly que adiciona os recursos necessários para compilar linguagens com coleta de lixo
- Permite executar linguagens como Java na web com velocidade quase nativa
- Espera-se que tenha um impacto ainda maior do que o Wasm para C++
- Colaboração entre Google Workspace e Chrome
- A parceria para avaliar o WasmGC começou no fim de 2020
- O mecanismo de cálculo do Sheets foi escolhido como alvo ideal de testes
- A equipe do V8 e os contribuidores do Binaryen (toolchain de otimização de WASM) ficaram responsáveis pelo runtime do WasmGC e pelas otimizações AOT
- Processo de otimização
- A versão inicial era 2 vezes mais lenta que JavaScript, mas otimizações contínuas foram realizadas
- Técnicas centrais de otimização da JVM e do V8 foram replicadas (só a aplicação de virtual method dispatching, speculative inlining e devirtualization trouxe ganho de 40% em velocidade)
- Uso de APIs de navegador altamente otimizadas (ex.: processamento de expressões regulares 100 vezes mais rápido)
- Remoção de padrões de código específicos de JavaScript
- Conclusão
- O WasmGC é uma tecnologia com potencial para evoluir a forma de desenvolver aplicações web
- No futuro, espera-se que o WasmGC ofereça suporte a multithreading com memória compartilhada e melhore o desempenho em thread única
- Recomendação para todos os desenvolvedores web: usar WasmGC em projetos de alto desempenho
2 comentários
É um caso que merece atenção.
No fim das contas, não há nenhuma informação sobre o quanto ficou mais rápido ao portar de JavaScript para WasmGC, mas no texto abaixo diz que ficou 2 vezes mais rápido.
Doubling calculation speed and other new innovations in Google Sheets
Referência: WebAssembly garbage collection (WasmGC) agora está ativado por padrão no Chrome