HTML Web Workers
Antes, Drag and Drop movía o etiquetaba cargas DOM con eventos de puntero. Esta lección deja los gestos de puntero y presenta Web Workers: JavaScript en un hilo de fondo para que un bucle largo no congele la UI. Alcance práctico — crear, mensajear, sin DOM en el worker — no flotas SharedWorker.
Por qué web workers en un curso HTML
Los principiantes ven la página congelada con un bucle ocupado en el hilo principal. Los workers son la primera API habitual para calcular en segundo plano. Tras DnD, la división es otra: el script de página posee DOM/UI; el worker posee el cálculo pesado y solo habla por mensajes.
Respuesta directa
1) new Worker("worker.js") o Blob. 2) postMessage desde la página. 3) En el worker onmessage, calcula, postMessage de vuelta. 4) Actualiza el DOM solo en la página. 5) Sin acceso directo al DOM. 6) Prefiere http(s) o Blob.
📊 main thread vs worker
| Topic | Main page script | Dedicated worker |
|---|---|---|
| Typical role | UI, DOM, create Worker | Heavy compute off UI thread |
| Talks via | postMessage / onmessage | postMessage / onmessage |
| Can touch DOM? | Yes | No — return data instead |
| Beginner entry | new Worker(url or Blob) | onmessage + compute + postMessage |
| This course depth | Required | Required (simple round-trip) |
| Not this lesson | Drag-and-drop gestures | SharedWorker / Service Worker products |
Mini ida y vuelta con Blob Worker
Un HTML construye un worker desde un Blob sin worker.js aparte. La página envía un número; el worker devuelve una suma en bucle.
<button id="go" type="button">Run in worker</button>
<pre id="out"></pre>
<script>
const out = document.getElementById("out");
const src =
"onmessage=function(e){" +
"var n=e.data,s=0,i;" +
"for(i=1;i<=n;i++){s+=i;}" +
"postMessage(s);" +
"};";
const blob = new Blob([src], { type: "application/javascript" });
const w = new Worker(URL.createObjectURL(blob));
w.onmessage = function (e) {
out.textContent = "Sum 1..40 = " + e.data;
};
document.getElementById("go").onclick = function () {
out.textContent = "Working…";
w.postMessage(40);
};
</script>
Leer las llamadas de ida y vuelta
- Blob + createObjectURL sin segundo archivo
- new Worker inicia script de fondo
- postMessage envía el número
- El worker calcula y responde
- La página escribe en pre — DOM en el hilo principal
- A diferencia de DnD: sin draggable
- Mantén la demo pequeña
La UI se queda en el hilo principal
El worker devuelve datos; el script de página decide qué ve el usuario. Esta demo pide un string; onmessage de la página actualiza el párrafo.
<button id="ask" type="button">Ask worker</button>
<p id="msg">Waiting…</p>
<script>
const msg = document.getElementById("msg");
const src =
"onmessage=function(e){" +
"postMessage('Worker got: ' + e.data);" +
"};";
const w = new Worker(
URL.createObjectURL(new Blob([src], { type: "application/javascript" }))
);
w.onmessage = function (e) {
msg.textContent = e.data;
};
document.getElementById("ask").onclick = function () {
w.postMessage("hello");
};
</script>
Leer la idea de propiedad de la UI
- El worker solo hace eco de un string — sin document
- La página asigna textContent
- El mismo puente de mensajes
- No es DnD
- No es Service Worker
- Usa worker cuando el trabajo arriesgue congelar la UI
- Siguiente: SSE
Cuándo usar un worker
- Bucle CPU largo: buen fit
- Cambio mínimo de string: suele el hilo principal
- Mover tarjeta: fue DnD
- GPS: fue Geolocation
- Productos SharedWorker/Service Worker: fuera de esta intro
- Actualizar botones desde el worker: no permitido
Práctica — crea, mensajéa, pinta
- Prueba la demo de suma.
- Cambia 40.
- Prueba la demo eco.
- Opcional: worker.js por http(s).
- Frase: DnD con puntero; workers off-thread por mensajes.
- Prefiere http(s)/Blob.
- Vista previa: SSE.
Errores fáciles
- Esperar querySelector dentro del worker
- Worker para tareas minúsculas
- Confundir con DnD
- Rutas file:// frágiles
- Olvidar onmessage en la página
- Tomar Blob como único patrón de producción
- Tomar la intro como curso SharedWorker completo
Resumen
- Los workers ejecutan JS fuera del hilo de UI
- postMessage/onmessage; DOM solo en la página
- Workers clásicos sin document/window
- Blob para demos; http(s) para worker.js
- DnD era mover/etiquetar con puntero; esta lección cómputo de fondo + mensajes
- Siguiente: SSE
🧠 Pon a Prueba tu Conocimiento
Pon a Prueba tu Conocimiento
Ponte a prueba con este cuestionario interactivo y descubre qué tan bien entiendes el tema
📝 Instrucciones
- Lee cada pregunta cuidadosamente
- Selecciona la mejor respuesta para cada pregunta
- Puedes repetir el quiz tantas veces como quieras
- Tu progreso se mostrará en la parte superior