Qué es WebAssembly
WebAssembly (WASM) es un formato binario de bajo nivel diseñado para ejecutarse en navegadores web a velocidad casi nativa. Permite compilar código escrito en lenguajes como C, C++, Rust, Go o Zig y ejecutarlo eficientemente en el navegador, junto con JavaScript.
Por qué importa
JavaScript es excelente para web pero lento para operaciones intensivas (procesamiento de imágenes, simulaciones, juegos 3D, compresión, criptografía pesada).
WebAssembly cubre ese gap: código compilado, optimizado, ejecutado por el motor del navegador a velocidad cercana a binario nativo.
Casos de uso reales
Apps de productividad
- Figma: usa WASM para renderizar el canvas y operaciones gráficas pesadas
- AutoCAD Web: versión WASM del software CAD
- Adobe Photoshop Web: WASM para procesamiento de imagen
Juegos
- Unity WebGL: exporta juegos a WASM para web
- Browser games complejos con física, AI, gráficos
Procesamiento multimedia
- FFmpeg.wasm: transcoding de vídeo en el navegador
- ImageMagick.wasm: procesamiento de imágenes
- Conversion de formatos en cliente sin servidor
Criptografía
- Operaciones seguras client-side
- Wallets de cripto
- Cifrado E2E
Lenguajes de programación
- Pyodide: Python ejecutándose en navegador vía WASM
- PHP.wasm, Ruby.wasm
Cómo funciona
- Escribes código en C, C++, Rust, Go, etc.
- Lo compilas a
.wasm(formato binario) - JavaScript carga el módulo WASM
- JS y WASM interactúan: WASM hace el trabajo pesado, JS gestiona UI
Ejemplo en Rust:
#[no_mangle]
pub extern "C" fn fibonacci(n: i32) -> i32 {
if n < 2 { n }
else { fibonacci(n-1) + fibonacci(n-2) }
}
Compilado:
rustc --target wasm32-unknown-unknown fib.rs --crate-type cdylib
Uso en JS:
const wasm = await WebAssembly.instantiateStreaming(fetch('fib.wasm'));
console.log(wasm.instance.exports.fibonacci(20)); // 6765
Ventajas
- Velocidad: 2-10x más rápido que JS equivalente
- Tamaño: WASM compacto (vs JS minified)
- Predecible: sin GC pauses, sin JIT warm-up
- Lenguajes: aprovechas ecosistemas de C/C++/Rust
- Sandbox seguro: no acceso directo a sistema operativo
Limitaciones
- No acceso al DOM directamente: debe ir vía JS
- Curva técnica: necesita conocer C/C++/Rust
- Tamaño inicial: incluir Rust runtime puede pesar 100-500KB
- Debug más complejo: stacktraces menos legibles
Cuándo usar WASM
✓ Buenos casos
- Operaciones CPU-intensivas (cifrado, simulación, gráficos)
- Migrar apps desktop legacy a web (CAD, photo editors)
- Reutilizar libraries C/C++ existentes
- Apps con requisitos de rendimiento estrictos
✗ Casos donde NO es necesario
- Webs corporativas, blogs, ecommerce estándar
- Apps con UI simple y poco procesamiento
- Cuando JavaScript es suficientemente rápido (95% de casos web)
En pyme española típica
Para una web pyme normal: WASM es irrelevante. JavaScript suficiente. Solo merece pena si construyes apps muy específicas con procesamiento pesado.
Las herramientas de IMPERO (auditoría SEO, test velocidad) usan Cloudflare Workers (JS edge) que es más simple y eficiente para nuestro caso.
Para conocer más
WebAssembly.org tiene documentación oficial. Rust + WASM book es la mejor introducción práctica.