Web Workers: Definición, Casos Uso, Ejemplos Performance

Web Workers corren JavaScript en threads background — mantiene main thread responsive. Para compute pesado, parsing, encryption, WebAssembly.

¿Qué es un Web Worker?

Un Web Worker es un script JavaScript que corre en un thread separado del main UI thread, en background. Al offloadear trabajo expensive (procesamiento imagen, parsing, criptografía, computaciones complex) a un Web Worker, mantienes el main thread libre para manejar input usuario, animaciones y rendering — preservando responsiveness y mejorando Core Web Vitals como INP.

Web Workers fueron introducidos en 2009 con HTML5.

Tipos de Web Workers

TipoCaso uso
Dedicated WorkerUn worker por página; más común
Shared WorkerCompartido entre múltiples tabs same origin
Service WorkerProxy red para offline/caching/push
WorkletWorkers especializados para features low-level

Ejemplo Web Worker básico

// main.js
const worker = new Worker('worker.js');
worker.postMessage({ task: 'compute', data: largeArray });
worker.addEventListener('message', (event) => {
  console.log('Result:', event.data);
});

// worker.js
self.addEventListener('message', (event) => {
  if (event.data.task === 'compute') {
    const result = expensiveCompute(event.data.data);
    self.postMessage(result);
  }
});

Qué pueden hacer los Web Workers

  • Computación pesada
  • Parsing JSON/XML/CSV grandes
  • Background sync
  • Correr módulos WebAssembly
  • Usar IndexedDB, fetch, WebSocket
  • La mayoría de APIs JS excepto DOM

Qué NO pueden hacer los Web Workers

  • Acceder DOM
  • Usar window, document
  • Usar XHR síncrono
  • Acceder localStorage

Cuándo usar un Web Worker

  • Computación long-running.
  • Procesamiento datos real-time.
  • Criptografía.
  • Procesamiento image/PDF.
  • Background fetching/syncing.
  • Módulos WebAssembly.

Service Worker

Los Service Workers actúan como proxy entre browser y red.

navigator.serviceWorker.register('/sw.js');

self.addEventListener('install', (event) => {
  event.waitUntil(
    caches.open('v1').then((cache) => cache.addAll(['/', '/styles.css']))
  );
});

Impacto performance Web Worker

Sin Workers, el trabajo JS pesado bloquea main thread, causando bad INP, scrolling janky, UI congelada.

Mejores prácticas Web Worker

  • Usar para tasks long.
  • Minimizar overhead message passing.
  • Usar Transferable Objects.
  • Worker pool para paralelismo.
  • Terminar cuando done.
  • Manejar errores.
  • Bundlear código worker.

Pitfalls comunes

  • Enviar datos huge en messages.
  • Intentar acceder DOM.
  • Olvidar terminar.
  • Over-engineering.
  • Costo startup worker.
  • No manejar errores worker.
  • Usar APIs sync.

Librerías Web Worker

LibreríaPropósito
ComlinkAPI RPC-style sobre postMessage
WorkerizeLoader webpack
Threads.jsWorker pool
Vite Worker importBuilt-in en Vite
WorkboxLibrería Google para patterns Service Worker

FAQ: Web Workers

¿Web Worker vs Service Worker?

Web Worker: JS background general. Service Worker: proxy red.

¿Pueden Web Workers acceder DOM?

No.

¿Son lentos al startup los Web Workers?

~10-50ms para spawnear.

¿Cómo comparto state entre workers?

SharedArrayBuffer.

¿Puedo correr packages npm en Web Worker?

Sí — vía bundler.

¿Qué es un Worklet?

Un worker especializado lightweight para APIs low-level.

¿Son necesarios Web Workers para mi app?

Solo si tienes trabajo CPU-bound bloqueando main thread.

Testea performance Web Worker con LoadFocus

LoadFocus corre auditorías Lighthouse desde 25+ regiones. Regístrate en loadfocus.com/signup.

¿Qué tan rápido es tu sitio web?

Mejora su velocidad y SEO sin problemas con nuestra Prueba de Velocidad gratuita.

Prueba de velocidad de sitio web gratis

Analice la velocidad de carga de su sitio web y mejore su rendimiento con nuestro comprobador de velocidad de página gratuito.

×