Quando C# encontra WebAssembly: uma nova era do desenvolvimento web
\n\nImagine um mundo onde você pode pegar seu amado C#, escrever um algoritmo complexo de processamento de imagens, compilá-lo e executá-lo diretamente no navegador — com desempenho próximo ao nativo. Parece ficção científica? Pois não é. Isso é WebAssembly (ou simplesmente Wasm) — uma tecnologia que está revolucionando o que é possível fazer na web.
\n\nEu mesmo era cético até experimentar. Por muito tempo, parecia que JavaScript era a única linguagem para o navegador. Mas os tempos estão mudando. Hoje, nós, desenvolvedores C#, podemos ir além do back-end e construir aplicações completas no lado do cliente em nossa linguagem nativa. Neste artigo, mostrarei como isso funciona, por que é necessário e darei exemplos reais de código.
\n\nO que é WebAssembly em termos simples
\n\nVamos sem termos complicados. WebAssembly é um formato binário de baixo nível de instruções que é executado no navegador com velocidade quase nativa. Ao contrário do JavaScript, que é interpretado, o Wasm é compilado previamente. É como se você estivesse executando um programa em C++ diretamente no navegador, mas com uma sandbox de segurança.
\n\nComo isso se relaciona com C#?
\n\nSeu código C# pode ser compilado para WebAssembly. Você escreve na sua linguagem familiar, usa bibliotecas .NET e, no final, obtém um arquivo .wasm que o navegador executa. Existem várias abordagens para isso, mas a mais popular é o Blazor WebAssembly.
- \n
- Blazor WebAssembly — framework da Microsoft que executa .NET no navegador. \n
- Mono Wasm Runtime — ambiente de execução .NET compilado para Wasm. \n
- NativeAOT — modo experimental de compilação de C# diretamente para Wasm sem runtime. \n
Por que usar C# no navegador?
\n\nBoa pergunta. Afinal, existem JavaScript, TypeScript. Por que precisamos de C#? A resposta está em três coisas: desempenho, segurança e ecossistema.
\n\n1. Desempenho para cálculos pesados
\nJavaScript é bom, mas para processamento de vídeo, criptografia, simulações ou análise de grandes volumes de dados, ele é mais lento. WebAssembly com C# pode ser de 10 a 20 vezes mais rápido para algumas tarefas. Por exemplo, se você escrever um editor de imagens em C#, ele funcionará no navegador tão rápido quanto um aplicativo desktop.
\n\n2. Reutilização de código
\nVocê tem uma biblioteca em C# para validação de dados no servidor? Basta usá-la no cliente. Sem duplicação de lógica em JavaScript. Isso reduz o número de bugs e acelera o desenvolvimento.
\n\n3. Segurança de tipos
\nC# é uma linguagem fortemente tipada. Muitos erros que são detectados em tempo de execução no JavaScript são capturados em tempo de compilação no C#. Para aplicações de negócios complexas, isso é crítico.
\n\nExemplo prático: compilando C# para WebAssembly
\n\nVamos escrever um programa simples em C# que calcula o fatorial e executá-lo no navegador. Para isso, usaremos o Blazor WebAssembly.
\n\nPasso 1: Criando o projeto
\ndotnet new blazorwasm -o WasmFactorial\ncd WasmFactorial\n\nIsso criará um template padrão do Blazor WebAssembly. Ele já contém tudo o que é necessário: o runtime .NET compilado para Wasm e uma ponte para interagir com JavaScript.
\n\nPasso 2: Escrevendo o código C# para os cálculos
\nVamos adicionar um serviço para calcular o fatorial. Crie o arquivo Services/FactorialService.cs:
namespace WasmFactorial.Services;\n\npublic class FactorialService\n{\n public long Calculate(int n)\n {\n if (n < 0) throw new ArgumentException("O número deve ser não negativo");\n if (n == 0) return 1;\n \n long result = 1;\n for (int i = 1; i <= n; i++)\n {\n result *= i;\n }\n