Un cálculo largo en el hilo principal puede bloquear los clics, la escritura y la pintura. Un Web Worker ejecuta JavaScript en un contexto global separado y se comunica con la página mediante mensajes.
const worker = new Worker(
new URL("./search.worker.js", import.meta.url),
{ type: "module" },
);
worker.addEventListener("message", ({ data }) => {
renderResults(data);
});
worker.postMessage({ query, records });// search.worker.js
self.addEventListener("message", ({ data }) => {
const results = expensiveSearch(data.records, data.query);
self.postMessage(results);
});Mantenga el límite del mensaje deliberado
- Enviar los datos más pequeños que el trabajador necesita; La clonación estructurada puede resultar costosa en el caso de gráficos de objetos grandes.
- Utilice buffers transferibles para datos binarios cuando la propiedad pueda pasar al trabajador.
- Maneje los errores de los trabajadores y finalícelos cuando la interfaz propietaria se elimine permanentemente.
Los trabajadores no pueden manipular la página DOM directamente. Envíe los resultados al hilo principal y actualice la interfaz allí.
