Saltar al contenido
Glosario / Desarrollo web
Desarrollo web

WebAssembly (WASM)

Formato binario de bajo nivel que se ejecuta en navegadores a velocidad cercana a nativo. Permite correr código C++, Rust, Go en web.

También conocido como: WebAssemblyWASM

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

  1. Escribes código en C, C++, Rust, Go, etc.
  2. Lo compilas a .wasm (formato binario)
  3. JavaScript carga el módulo WASM
  4. 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.

Da el primer paso

AUDITORÍA GRATUITA
SIN COMPROMISO.

Reserva una llamada de 15 minutos. Analizamos tu web, tu publicidad y tu posicionamiento digital. Te decimos exactamente qué mejorar y cuánto puedes ahorrar. Sin coste, sin compromiso.