Este repositorio contiene una colección de ejemplos prácticos para ilustrar los diferentes patrones de uso de los Web Workers en JavaScript. El objetivo es mostrar cómo descargar tareas pesadas del hilo principal para mantener una interfaz de usuario fluida y receptiva.
# 1. Clonar el repositorio
git clone https://github.com/damiansire/web-worker-patterns.git
cd web-worker-patterns
# 2. Ejecutar con Docker (recomendado)
./start.sh # macOS/Linux
start.bat # Windows
# 3. Abrir en tu navegador
# http://localhost:9000🎉 ¡Listo! En menos de 30 segundos tendrás todos los ejemplos corriendo.
- 01-basic-communication: El "Hola Mundo" de los Web Workers. Comunicación básica entre el hilo principal y el worker.
- 02-offloading-computation: Cómo evitar que la UI se congele ejecutando cálculos pesados en un worker.
- 03-transferable-objects: Optimización del rendimiento al transferir objetos grandes como
ArrayBuffer. - 04-error-handling: Cómo capturar y manejar errores que ocurren dentro de un worker.
- 05-shared-worker: Cómo compartir un worker entre múltiples pestañas o iframes.
- 06-lifecycle-and-termination: Cómo gestionar el ciclo de vida de un worker y terminarlo explícitamente.
- 07-worker-limits: Límites de workers por navegador y qué sucede cuando se exceden.
- 08-worker-pool: Patrón Worker Pool para procesar muchas tareas con pocos workers.
Los Web Workers permiten ejecutar scripts de JavaScript en hilos de fondo, separados del hilo principal de ejecución de una página web. Esto es especialmente útil para:
- Evitar que operaciones costosas bloqueen la interfaz de usuario
- Realizar cálculos complejos sin afectar la experiencia del usuario
- Procesar grandes volúmenes de datos
- Mantener la aplicación responsiva durante tareas intensivas
Debido a las políticas de seguridad del navegador (CORS), no puedes ejecutar los ejemplos abriendo los archivos index.html directamente. Necesitas un servidor local.
La forma más rápida y sencilla de ejecutar todos los ejemplos:
Antes de ejecutar los comandos, asegúrate de que Docker esté instalado y ejecutándose:
# Verificar si Docker está corriendo
docker --version
docker psSi ves un error como "Cannot connect to the Docker daemon", significa que Docker no está corriendo. Aquí está cómo iniciarlo:
🍎 macOS (click para expandir)
# Opción 1: Abrir Docker Desktop desde Aplicaciones
open -a Docker
# Opción 2: Desde la terminal (si está instalado)
open /Applications/Docker.app
# Esperar a que Docker inicie (puede tomar 10-30 segundos)
# Verás el ícono de Docker en la barra de menú cuando esté listoVerificar que está corriendo:
# Deberías ver información de la versión sin errores
docker info🪟 Windows (click para expandir)
# Opción 1: Buscar "Docker Desktop" en el menú inicio y hacer clic
# Opción 2: Desde PowerShell
Start-Process "C:\Program Files\Docker\Docker\Docker Desktop.exe"
# Esperar a que Docker inicie (puede tomar 10-30 segundos)
# Verás el ícono de Docker en la bandeja del sistema cuando esté listoVerificar que está corriendo:
docker info🐧 Linux (click para expandir)
# Iniciar el servicio Docker
sudo systemctl start docker
# Habilitar Docker para que inicie automáticamente
sudo systemctl enable docker
# Verificar el estado
sudo systemctl status dockerVerificar que está corriendo:
docker info¿No tienes Docker instalado? Descárgalo aquí
¿Problemas con Docker? Consulta la Guía Completa de Docker con troubleshooting y comandos útiles.
Opción A: Script Automático (Recomendado)
Usa el script que verifica y levanta Docker automáticamente:
# 1. Clonar el repositorio
git clone https://github.com/damiansire/web-worker-patterns.git
cd web-worker-patterns
# 2. Ejecutar el script (detecta tu sistema operativo)
# En macOS/Linux:
./start.sh
# En Windows (Command Prompt o PowerShell):
start.batEl script automáticamente:
- ✅ Verifica si Docker está instalado
- ✅ Detecta si Docker está corriendo (y lo inicia en macOS)
- ✅ Levanta el contenedor
- ✅ Te muestra la URL para abrir en el navegador
Opción B: Manual
# 1. Clonar el repositorio
git clone https://github.com/damiansire/web-worker-patterns.git
cd web-worker-patterns
# 2. Asegurarse de que Docker está corriendo (ver arriba)
docker ps
# 3. Levantar el contenedor con Docker Compose
docker-compose up -d
# 4. Abrir en el navegador
# http://localhost:9000Ventajas:
- ✅ No necesitas instalar Python, Node.js o PHP
- ✅ Configuración automática de servidor web optimizado (Nginx)
- ✅ Los cambios en archivos se reflejan inmediatamente (hot-reload)
- ✅ Funciona igual en cualquier sistema operativo
Comandos útiles:
# Ver logs
docker-compose logs -f
# Detener el contenedor
docker-compose down
# Reiniciar
docker-compose restart# Python 3
python3 -m http.server 8000# Si tienes npx instalado
npx serve
# O usando http-server
npx http-serverphp -S localhost:8000- Clona este repositorio:
git clone https://github.com/damiansire/web-worker-patterns.git cd web-worker-patterns - Inicia un servidor local usando una de las opciones anteriores.
- Abre tu navegador en
http://localhost:8000(ohttp://localhost:9000para Docker). - Navega por los diferentes ejemplos desde el índice principal.
Si eres nuevo en Web Workers, te recomiendo seguir los ejemplos en orden:
- Comienza con 01-basic-communication para entender los fundamentos
- Continúa con 02-offloading-computation para ver el caso de uso principal
- Aprende sobre 04-error-handling para hacer tu código más robusto
- Explora 03-transferable-objects para optimizaciones de rendimiento
- Experimenta con 06-lifecycle-and-termination para gestión de recursos
- Entiende los límites con 07-worker-limits para aplicaciones escalables
- Aprende el patrón 08-worker-pool para escalar a muchas tareas
- Finalmente, prueba 05-shared-worker para casos de uso avanzados
- Los Web Workers no tienen acceso al DOM
- La comunicación entre el hilo principal y el worker se hace mediante mensajes
- Los datos se clonan al pasar entre hilos (excepto cuando se usan transferable objects)
- Los Shared Workers requieren soporte del navegador (verifica la compatibilidad)
¡Las contribuciones son bienvenidas! Si tienes ideas para nuevos ejemplos o mejoras, no dudes en abrir un issue o pull request.
Este proyecto está bajo la licencia MIT. Siéntete libre de usar estos ejemplos para aprender y enseñar.
Hecho con ❤️ para la comunidad de desarrolladores.