¿Qué es WebAssembly?
WebAssembly (Wasm) es un formato de instrucciones binarias pensado como destino de compilación portátil para lenguajes como C, C++ y Rust. Permite ejecutar código en el navegador a una velocidad cercana a la nativa. Se convirtió en recomendación del W3C en 2019 y hoy lo admiten todos los navegadores principales: Chrome, Firefox, Safari y Edge.
Aplicado a los archivos, significa que tareas pesadas como editar PDF, comprimir imágenes o reconocer texto con OCR pueden hacerse por completo en el navegador, sin pasar por un servidor. Aplicaciones web como Photopea y Figma se apoyan en WebAssembly. Las herramientas locales de Allin PDF usan la misma plataforma: librerías JavaScript y WebAssembly que se ejecutan en Web Workers, de modo que la página sigue respondiendo mientras tu archivo se procesa en tu dispositivo.
Cómo procesan archivos pdf-lib, PDF.js y Tesseract.js en el navegador
Las herramientas locales de Allin PDF se basan en tres librerías de código abierto. No todas son WebAssembly, pero todas se ejecutan en tu dispositivo:
pdf-lib: edición de PDF en el navegador
pdf-lib es una librería JavaScript (TypeScript) que crea y modifica documentos PDF íntegramente en el cliente. Se ocupa de unir, dividir y reordenar páginas, insertar texto e incrustar imágenes sin llamar a ningún servidor. pdf-lib está escrita en JavaScript puro, no en WebAssembly. Los motores JavaScript actuales la compilan a código máquina rápido, y al ejecutarla en un Web Worker los trabajos grandes no bloquean la página.
PDF.js: renderizado de páginas PDF
PDF.js es el motor PDF de Mozilla, el mismo que incluye Firefox. Analiza y dibuja las páginas de un PDF, que es lo que necesitan herramientas como PDF a imagen. Está escrito sobre todo en JavaScript, y las versiones recientes usan WebAssembly para algunos decodificadores de imagen.
Tesseract.js: OCR sin servidor
Tesseract.js es la versión en WebAssembly del motor OCR Tesseract. El motor puede entrenarse para muchos idiomas; el OCR gratuito de Allin PDF ofrece cinco: inglés, chino simplificado, chino tradicional, japonés y coreano. El español no está entre ellos, así que las tildes y la ñ pueden leerse mal; para textos en español conviene el OCR con IA del plan Pro. Los datos del idioma se descargan la primera vez que lo usas y, a partir de ahí, el reconocimiento se hace en la pestaña del navegador sin subir tu imagen ni tu PDF.
Rendimiento: WebAssembly frente a aplicaciones nativas
¿Procesar en el navegador es más lento que usar un programa de escritorio? Para el trabajo diario con PDF, normalmente la diferencia apenas se nota. La velocidad real depende de tu dispositivo, de tu navegador y del propio archivo. La tabla muestra qué hace el trabajo en Allin PDF y qué influye en la velocidad:
| Operación | Qué hace el trabajo | Dónde se ejecuta | Qué influye en la velocidad |
|---|---|---|---|
| Comprimir PDF | pdf-lib más recodificación de imágenes | Tu navegador | Número y tamaño de las imágenes, nivel de compresión |
| Unir PDF (2–20 archivos) | pdf-lib (copia las páginas tal cual) | Tu navegador | Tamaño total y número de páginas |
| OCR de una página | Tesseract.js (WebAssembly) | Tu navegador | Resolución de la imagen, CPU, descarga inicial del idioma |
| Cifrar PDF (AES-256) | Cifrado de PDF en el navegador | Tu navegador | Tamaño del archivo |
| Renderizar PDF a imagen | PDF.js | Tu navegador | Número de páginas, resolución de salida |
En general, WebAssembly es algo más lento que el mismo código compilado de forma nativa, y la distancia se reduce a medida que los navegadores mejoran sus compiladores Wasm. En un PDF típico pesan más el tamaño del archivo, la cantidad de imágenes y la memoria disponible en tu equipo.
Modelo de seguridad: por qué importa la ejecución en sandbox
WebAssembly ofrece garantías de seguridad sólidas gracias a su modelo de ejecución aislada:
- Aislamiento de memoria: el código Wasm trabaja en su propia memoria lineal, separada del resto del navegador. No puede acceder a otras pestañas, a las cookies ni a los recursos del sistema.
- Sin acceso directo al sistema: Wasm no puede leer tus archivos, conectarse a la red ni llamar a las API del sistema operativo por su cuenta. Solo usa lo que el JavaScript de la página le pasa de forma explícita.
- Política del mismo origen: los módulos Wasm siguen las mismas restricciones que JavaScript, así que no acceden a datos de otros orígenes sin cabeceras CORS.
- Validación antes de ejecutar: cada binario Wasm se valida antes de ejecutarse, lo que bloquea código malformado y evita muchos de los errores de memoria habituales en los programas nativos.
El futuro de las herramientas en el navegador
WebAssembly sigue evolucionando, y sus funciones recientes y futuras acortan aún más la distancia con las apps nativas:
- WASI (WebAssembly System Interface): una interfaz de sistema estándar para E/S de archivos y red, pensada sobre todo para ejecutar Wasm fuera del navegador
- Hilos y SIMD: Wasm multihilo con instrucciones SIMD acelera el trabajo en paralelo con archivos grandes
- Recolección de basura: el soporte nativo de GC permite compilar a Wasm de forma eficiente lenguajes como Java, Kotlin y Dart
- Modelo de componentes: permite combinar módulos Wasm escritos en distintos lenguajes en una sola aplicación
La tendencia es clara: cada vez más aplicaciones de escritorio dan el salto al navegador. Para archivos con datos sensibles, como PDF, documentos e imágenes, las herramientas locales en el navegador combinan bien velocidad, privacidad y comodidad.
Preguntas frecuentes
¿WebAssembly funciona en navegadores móviles?
Sí. WebAssembly funciona en Chrome para Android, Safari en iOS y Firefox para Android. Los móviles tienen menos CPU y memoria que un ordenador, así que los archivos grandes tardan más, pero tareas habituales como comprimir o unir PDF funcionan bien en los smartphones actuales.
¿Puede WebAssembly acceder a mis archivos sin permiso?
No. WebAssembly no tiene acceso directo a tu sistema de archivos. Eres tú quien elige los archivos con el selector o arrastrándolos a la página. El código Wasm solo procesa los datos que le das; no puede buscar ni leer otros archivos de tu dispositivo.
¿WebAssembly va a reemplazar a JavaScript?
No. WebAssembly complementa a JavaScript. JS sigue siendo la mejor opción para la interfaz, la manipulación del DOM y la lógica de la aplicación. Wasm se encarga de tareas de cálculo intensivo (compresión, análisis, OCR) donde importa la velocidad casi nativa. La mayoría de las apps web modernas usan ambos.