O que é WebAssembly e você deve usá-lo?

JavaScript não é mais a única linguagem que pode ser executada nativamente em navegadores. O WebAssembly foi definido para revolucionar a maneira como você codifica para a web, permitindo que aplicativos nativos sejam portados para o navegador com desempenho quase nativo.
O que exatamente é WebAssembly?
JavaScript é uma linguagem totalmente interpretada. Quando você se conecta a um site, eles enviam o código JavaScript para que você execute. Normalmente é reduzido (espaços em branco e quebras de linha são removidos para economizar espaço), mas você pode abrir as ferramentas de desenvolvimento do Chrome e ler o código-fonte diretamente. Embora o JavaScript seja bastante rápido hoje em dia, ele ainda precisa ser interpretado pelo mecanismo JS, que pode demorar um pouco para ser analisado e adiciona muita sobrecarga. Além disso, o JavaScript não apresenta exatamente um desempenho desde o início.
WebAssembly, geralmente abreviado como Wasm, não é realmente uma “ linguagem ” que você vai escrever à mão. É um formato de instrução binária projetado para ser mais rápido que o JavaScript e muito próximo das linguagens compiladas. Ainda é uma linguagem interpretada, mas foi projetada para ser interpretada por máquinas, não humanos.
Como o Wasm foi projetado desde o início, ele foi construído com o desempenho em mente. Ele remove a prototipagem complexa de JS e apresenta primitivos adequados. JS só tem floats para números — todas as operações matemáticas em JS são feitas usando floats, embora a matemática float seja muito mais lenta e desnecessária na maioria dos casos. Wasm fornece primitivos para ints e fornece acesso de nível de byte à memória. Ele tem uma representação textual chamada WebAssembly Text (. wat), que você pode usar para codificar diretamente. Você sempre o empacotará em seu formato binário para uso na web. Nos bastidores, o Wasm é executado em uma máquina virtual baseada em pilha, que traduz as instruções para o código real executado em sua máquina.
Por ser apenas um formato de instrução, a mágica do Wasm é que ele pode ser usado como um alvo de compilação portátil para outras linguagens, sem sacrificar a velocidade como você faria com a transpilação. Isso inclui linguagens como C ++ e Rust, que agora podem ser executadas na web quando compiladas para Wasm.

Se sua mente estava explodindo, isso não é teórico — na verdade funciona na prática. AutoDesk foi capaz de portar AutoCAD, uma base de código C ++ de 30 anos, para um aplicativo da web baseado em WebAssembly, em alguns meses, com relativa facilidade. Aplicativos nativos transferidos para a web são um caso de uso importante para o Wasm, e começaremos a ver mais aplicativos adotando essa abordagem conforme o Wasm empurra o que é possível no navegador.
Se você quiser uma demonstração legal da potência do Wasm, provavelmente já a tem — o Google Earth é executado no Wasm, renderizando modelos 3D complexos com níveis de LoD perfeitos e carregando enquanto você voa pelo planeta, tudo a 60 FPS perfeitamente suaves. Isso simplesmente não é possível com JavaScript.
Se você deseja começar a trabalhar com o Wasm, pode acessar um playground online WebAssembly para experimentá-lo.
Wasm vai substituir o JavaScript?
Não. JavaScript ainda continua sendo uma linguagem fantástica e, com o uso do NPM ultrapassando todos os outros gerenciadores de pacotes de linguagem, ele não vai desaparecer tão cedo.
Mecanismos de JavaScript modernos como o V8 ainda são bastante rápidos e, embora não permita o mesmo tipo de desempenho nativo que o Wasm oferece, ainda é aceitável para a maioria dos aplicativos da web básicos e scripts simples que não precisa fazer processamento massivo de dados. Essencialmente, você não usaria Wasm para scripts básicos em seu site. Acionar um alerta quando um usuário pressiona um botão, por exemplo, é facilmente feito por JS, não precisa ter desempenho suficiente para ser executado um milhão de vezes por segundo e certamente não precisa ser escrito em C .
JS também é muito mais acessível, como comprovado pelo sucesso de estruturas JS do lado do cliente como React. Os aplicativos da web desenvolvidos com React ainda são bastante rápidos e, com boa otimização de renderização, podem ser executados a 60 FPS sem falhas na maioria dos smartphones.
No entanto, quando você acelera e deseja executar um aplicativo de desktop em um navegador, o Wasm se tornará o formato de escolha. Mesmo assim, o JavaScript ainda é necessário para chamar métodos Wasm, e você ainda vai usá-lo em uma base de código Wasm.
Wasm na área de trabalho
Isso parece um pouco contra-intuitivo no início, mas o Wasm rodando no servidor é muito mais razoável do que você imagina. WASI, ou WebAssembly System Interface, padroniza como o Wasm interage com o sistema e fornece um ambiente modular para que o WebAssembly faça toda a sua mágica fora do navegador, seja em seu desktop ou em um ambiente de servidor. Com o WASI, os desenvolvedores podem escrever o mesmo aplicativo para nativo e web, sem recorrer à execução de mais instâncias do Chrome com Electron.
De certa forma, isso substitui muito do que o Docker realiza. O fundador da Docker, Solomon Hykes, até disse isso. O código escrito em qualquer linguagem (o que o torna diferente do . NET / JVM) pode provavelmente ser compilado no Wasm e executado em qualquer servidor usando WASI. Ele abstrai o código da máquina (não precisa mais compilar para uma CPU ou sistema operacional específico) e simplesmente requer que o WASI seja compilado e instalado na máquina em que é executado. Embora o Docker também não vá desaparecer e, no futuro, poderá executar contêineres Linux, Windows e WASI lado a lado.
Isso é semelhante à promessa feita pelo Java — o ambiente de tempo de execução executará o mesmo código em um host Windows ou Linux. O ponto de venda do Wasm, no entanto, é que você não precisa programar em Java e é livre para escolher linguagens de melhor desempenho, como C ++ e Rust.
Nenhum comentário