≡En resumen
- WebAssembly no es un lenguaje que se escriba a mano: es el destino al que se compilan otros lenguajes.
- Es el cuarto lenguaje nativo de la web, junto a HTML, CSS y JavaScript, según el W3C.
- No sustituye a JavaScript: lo complementa en las partes que necesitan mucho cálculo.
- Se ejecuta en un entorno aislado (sandbox) con los mismos permisos de seguridad que la página.
- Con WASI también se usa fuera del navegador: servidores, edge computing y plugins.
01 ¿Qué es WebAssembly?
WebAssembly nació para resolver un límite de la web: JavaScript es flexible, pero no fue diseñado para tareas de cálculo intensivo como videojuegos 3D, edición de vídeo o CAD. Su antecesor fue asm.js, un subconjunto optimizable de JavaScript impulsado por Mozilla; WebAssembly tomó esa idea y la convirtió en un formato binario estándar acordado por todos los navegadores.
02 Cómo funciona WebAssembly
-
1
Escribes el código
En un lenguaje compilado como C, C++ o Rust, o en AssemblyScript si prefieres una sintaxis parecida a TypeScript.
-
2
Lo compilas a .wasm
Con herramientas como Emscripten (C/C++), wasm-pack (Rust) o el compilador de Go. El resultado es un módulo binario compacto.
-
3
El navegador lo descarga
El archivo .wasm pesa poco y se decodifica y valida más rápido que el JavaScript equivalente.
-
4
Se compila a código máquina
El motor del navegador lo traduce a instrucciones del procesador y puede guardar en caché el resultado.
-
5
JavaScript lo llama
La página importa el módulo y llama a sus funciones; Wasm y JavaScript intercambian datos a través de memoria compartida.
Con la API estándar basta una línea para descargar, compilar e instanciar un módulo:
const { instance } = await WebAssembly.instantiateStreaming(fetch('/motor.wasm'));
Después llamas a sus funciones exportadas como a cualquier función: instance.exports.aplicarFiltro(ancho, alto);
03 Historia y versiones de WebAssembly
| Fecha | Hito |
|---|---|
| 2015 | Se anuncia el proyecto, con participación de los equipos de Chrome, Firefox, Safari y Edge. |
| Marzo de 2017 | Se publica el MVP (versión 1.0) y llega a los principales navegadores. |
| 5 de diciembre de 2019 | El W3C lo publica como Recomendación: cuarto lenguaje nativo de la web tras HTML, CSS y JavaScript. |
| 25 de enero de 2024 | Sale WASI 0.2, que introduce el modelo de componentes para usar Wasm fuera del navegador. |
| Diciembre de 2024 | WebAssembly 2.0 pasa a ser estándar del W3C (SIMD, tipos de referencia, operaciones de memoria en bloque). |
| 17 de septiembre de 2025 | Se publica WebAssembly 3.0. |
Memoria de 64 bits
Wasm 3.0 amplía el espacio de direcciones más allá de los 4 GB de la versión anterior.
Recolección de basura
Tipos struct y array gestionados por el motor, clave para compilar Java, Kotlin o Dart sin llevar su propio recolector.
Excepciones y llamadas de cola
Manejo nativo de excepciones y tail calls, útiles para lenguajes funcionales.
Varias memorias
Un módulo puede declarar y usar varias memorias a la vez.
04 Para qué sirve WebAssembly: casos reales
3x
Mejora del tiempo de carga de Figma al pasar a WebAssembly (2017)
Fuente: Blog de Figma, «WebAssembly cut Figma's load time by 3x»
99 %
Navegadores en uso compatibles con WebAssembly 1.0 (marzo de 2024)
Fuente: Wikipedia (WebAssembly), con datos de Can I use
Diseño y edición
Figma mejoró más de tres veces su carga con Wasm, y Adobe llevó Photoshop a la web compilando su código C++ con Emscripten.
Videojuegos y 3D
Motores como Unity publican juegos para navegador compilando su código a WebAssembly.
Multimedia
Códecs de audio y vídeo, compresión de imágenes o edición de vídeo en el navegador.
Ciencia y datos
Pyodide ejecuta Python en el navegador; también se usa para simulaciones, criptografía y cálculo.
Reutilizar código existente
Una empresa con una librería de cálculo en C++ la lleva a su aplicación web sin reescribirla en JavaScript.
Para la mayoría de webs corporativas o tiendas online no hace falta WebAssembly: su rendimiento depende más de imágenes, scripts de terceros y servidor que del cálculo en el navegador. Si tu problema es que la web tarda en cargar, empieza por la velocidad de carga web. Wasm brilla en aplicaciones con mucha lógica en el cliente.
05 WebAssembly vs JavaScript
| Aspecto | WebAssembly | JavaScript |
|---|---|---|
| Formato | Binario compilado (.wasm) | Texto interpretado y compilado al vuelo |
| Cómo se escribe | Se genera desde C, C++, Rust, Go… | Se escribe directamente |
| Rendimiento | Cercano al nativo y predecible | Muy bueno, pero variable en cálculo intensivo |
| Acceso al DOM | Indirecto, a través de JavaScript | Directo |
| Mejor para | Cálculo, gráficos, códecs, portar software existente | Interfaz, lógica de la página, APIs del navegador |
06 WebAssembly fuera del navegador: WASI
WASI (WebAssembly System Interface) es la interfaz estándar que permite ejecutar módulos Wasm en servidores y otros entornos con acceso controlado a archivos, reloj o red. Con WASI 0.2 llegó el modelo de componentes, que permite combinar módulos escritos en distintos lenguajes de programación. Motores como Wasmtime ejecutan estos módulos, y plataformas de edge computing los usan para funciones que arrancan en milisegundos.
- ✓Funciones serverless y en el edge con arranque muy rápido.
- ✓Sistemas de plugins seguros, porque el módulo solo accede a lo que se le permite.
- ✓Código portable: el mismo binario funciona en distintos sistemas operativos y procesadores.
- ✓Aislamiento de código de terceros dentro de una aplicación.
Si tu aplicación web procesa imágenes, planos, audio o grandes volúmenes de datos en el navegador, o si ya tienes lógica en C++ o Rust que quieres reutilizar, WebAssembly es una opción seria. Si estás decidiendo entre app nativa, híbrida o PWA, ten en cuenta que Wasm permite que una web app haga tareas que antes exigían una aplicación instalada.
Preguntas frecuentes sobre WebAssembly
Es un formato de código binario de bajo nivel, estándar del W3C, que los navegadores ejecutan de forma segura y casi a velocidad nativa. Se genera compilando lenguajes como C, C++ o Rust.
Para ejecutar en la web tareas de cálculo intensivo (editores gráficos, videojuegos, códecs, CAD) y para reutilizar en el navegador software escrito en otros lenguajes.
No. Lo complementa: JavaScript sigue controlando la interfaz y el acceso al DOM, y WebAssembly se encarga de las partes que necesitan más rendimiento.
C y C++ (con Emscripten o Clang), Rust, Go, Kotlin, AssemblyScript, Dart y muchos otros; hay decenas de lenguajes con soporte.
Es la abreviatura de WebAssembly y también la extensión de sus archivos binarios (.wasm).
Todos los principales: Chrome, Firefox, Safari y Edge, en escritorio y en móvil. En marzo de 2024 el 99 % de los navegadores en uso soportaba la versión 1.0.
Es la versión publicada el 17 de septiembre de 2025, que añade memoria de 64 bits, varias memorias, recolección de basura, manejo de excepciones y llamadas de cola, entre otras novedades.
Elige un lenguaje con buenas herramientas: Rust con wasm-pack o C/C++ con Emscripten. Compila una función sencilla a .wasm, cárgala desde JavaScript con WebAssembly.instantiateStreaming y mide si mejora el rendimiento frente a la versión en JavaScript.
Fuentes consultadas
Sobre el autor
Germán Gutiérrez
Development Manager en appyweb
Dirige el equipo de desarrollo de appyweb: aplicaciones web y móviles, SaaS, integraciones y arquitectura de software.
Ver perfil en LinkedIn ↗