Middle
¿Qué son los web workers y para qué sirven?
sobes.tech AI
Respuesta de la IA
Los web workers son una forma de ejecutar código JavaScript en un hilo de fondo, separado del hilo principal de la interfaz de usuario del navegador.
Propósito:
- Ejecutar cálculos intensivos en recursos sin bloquear el hilo principal, lo que evita que la interfaz se congele.
- Procesar grandes volúmenes de datos o realizar operaciones prolongadas (por ejemplo, análisis, compresión, solicitudes de red en algunos casos) en segundo plano.
- Mejorar el rendimiento y la capacidad de respuesta de las aplicaciones web.
Tipos de web workers:
- Dedicated Worker: Asociado con el script que lo creó.
- Shared Worker: Puede ser compartido entre varios scripts que se ejecutan en diferentes ventanas o pestañas del mismo dominio.
- Service Worker: Intercepta solicitudes de red, gestiona el caché, proporciona acceso sin conexión, soporta notificaciones push.
Ejemplo de creación y uso de un Dedicated Worker:
// main.js (hilo principal)
const worker = new Worker('worker.js');
// Enviar un mensaje al worker
worker.postMessage('Iniciar cálculos pesados');
// Recibir mensajes del worker
worker.onmessage = function(event) {
console.log('Recibido del worker:', event.data);
};
// worker.js (código del worker)
self.onmessage = function(event) {
console.log('Recibido en el worker:', event.data);
// Simulación de cálculos pesados
let result = 0;
for (let i = 0; i < 1000000000; i++) {
result += i;
}
// Enviar mensaje de vuelta al hilo principal
self.postMessage('Cálculos terminados, resultado: ' + result);
};
Limitaciones:
- No tiene acceso directo al DOM.
- No se pueden usar algunas variables globales del hilo principal (por ejemplo,
window,document). - La comunicación se realiza mediante intercambio asíncrono de mensajes (
postMessageyonmessage/addEventListener('message')). - Los datos entre hilos se transfieren mediante copia (algoritmo de clonación estructurada), pero para grandes datos se puede usar
Transferable Objectspara transferir por referencia (perdiendo acceso en el hilo original).