¿Cómo crear un hilo de Web Worker en JavaScript?
sobes.tech AI
Respuesta de la IA
Para crear un Web Worker en JavaScript, se utiliza el constructor Worker, que acepta la ruta al script que se ejecuta en un hilo separado.
const worker = new Worker('path/to/worker.js');
El script del worker (worker.js) se ejecuta en otro contexto global, que no tiene acceso al DOM ni al objeto global window. Para intercambiar datos entre el script principal y el worker, se utilizan los métodos postMessage() y el manejador de eventos onmessage.
En el script principal:
const worker = new Worker('worker.js');
// Enviar datos al worker
worker.postMessage({ data: '¡Hola desde el hilo principal!' });
// Procesar mensajes del worker
worker.onmessage = function(event) {
console.log('Recibido del worker:', event.data);
};
// Procesar errores del worker (opcional)
worker.onerror = function(error) {
console.error('Error en el worker:', error);
};
// Finalizar el worker
// worker.terminate();
En el script del worker (worker.js):
// Procesar mensajes del hilo principal
self.onmessage = function(event) {
console.log('Recibido en el worker:', event.data);
// Realizar una operación prolongada (¡ejemplo!)
let result = 0;
for (let i = 0; i < 1000000000; i++) {
result += i;
}
// Enviar el resultado de vuelta al hilo principal
self.postMessage({ result: result, originalData: event.data });
};
// Procesar errores dentro del worker (opcional)
self.onerror = function(error) {
console.error('Error dentro del worker:', error);
};
// El worker puede importar otros scripts
// importScripts('utils.js', 'helper.js');
Los Web Workers permiten trasladar cálculos intensivos a un hilo separado, evitando bloquear el hilo principal de la interfaz de usuario y mejorando la capacidad de respuesta de la aplicación. Se deben tener en cuenta las limitaciones: los workers no tienen acceso directo al DOM, window, document, localStorage ni sessionStorage. La comunicación de datos se realiza mediante la copia de valores o usando objetos Transferable para mejorar el rendimiento al transferir grandes volúmenes de datos.