From 38545b7898cab48e456c15451863800aebdcf7a6 Mon Sep 17 00:00:00 2001 From: nahuelcoder Date: Fri, 21 Aug 2020 12:32:52 -0300 Subject: [PATCH 01/28] Traslation --- 2-ui/99-ui-misc/03-event-loop/article.md | 113 +++++++++++------------ 1 file changed, 56 insertions(+), 57 deletions(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index 4a1625288..ca5c368d4 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -1,64 +1,63 @@ +# Evento ciclo: microtareas y macrotareas -# Event loop: microtasks and macrotasks +El flujo de ejecución de JavaScript en el navegador, así como en Node.js, está basado en un *event loop* (evento ciclo). -Browser JavaScript execution flow, as well as in Node.js, is based on an *event loop*. +Entender como este evento ciclo funciona es importante para optimizaciones y en algunos casos para la arquitecura correcta. -Understanding how event loop works is important for optimizations, and sometimes for the right architecture. +En este capítulo primero vamos a ver detalles teóricos acerca de como funcionan las cosas y luego veremos aplicaciones prácticas de ese conocimiento. -In this chapter we first cover theoretical details about how things work, and then see practical applications of that knowledge. +## Evento Ciclo -## Event Loop +El concepto de *evento ciclo* es muy simple. Existe un ciclo infinito en el que el motor de JavaScript aguarda por una tarea, luego ejecuta la tarea requerida y finalmente vuelve a dormir esperando por una nueva tarea. -The concept of *event loop* is very simple. There's an endless loop, when JavaScript engine waits for tasks, executes them and then sleeps waiting for more tasks. +EL algoritmo general del motor: -The general algorithm of the engine: +1. Mientras haya tareas: + - ejecutarlas comenzando por la más antigua. +2. Dormir hasta que aparezca una tarea, luego volver a 1. -1. While there are tasks: - - execute them, starting with the oldest task. -2. Sleep until a task appears, then go to 1. +Eso es una formalización de lo que vemos cuando navegamos por una página. El motor JavaScript no hace nada la mayoría del tiempo y solo corre cuando un script/handler/evento se activa. -That's a formalization for what we see when browsing a page. JavaScript engine does nothing most of the time, only runs if a script/handler/event activates. +Ejemplos de tareas: -Examples of tasks: +- Cuando un script externo ` ``` -...But we also may want to show something during the task, e.g. a progress bar. +... Pero puede que queramos mostrar algo durante la tarea, e.g. una barra de progreso. -If we split the heavy task into pieces using `setTimeout`, then changes are painted out in-between them. +Si dividimos la tarea más pesada en piezas pequeñas usando `setTimeout`, entonces los cambios son aplicados entre ellos. -This looks prettier: +Esto se ve mejor: ```html run
@@ -196,7 +196,7 @@ This looks prettier: function count() { - // do a piece of the heavy job (*) + // realiza una pieza del trabajo pesado (*) do { i++; progress.innerHTML = i; @@ -212,7 +212,7 @@ This looks prettier: ``` -Now the `
` shows increasing values of `i`, a kind of a progress bar. +Ahora el `
` muestra el incremento en el valor `i`, una especie de barra de progreso. ## Use case 3: doing something after the event From 528b61059bac5bb98a4d29064cfb12fd8ca7764b Mon Sep 17 00:00:00 2001 From: nahuelcoder Date: Mon, 24 Aug 2020 11:40:37 -0300 Subject: [PATCH 03/28] Traslation --- 2-ui/99-ui-misc/03-event-loop/article.md | 113 ++++++++++++----------- 1 file changed, 57 insertions(+), 56 deletions(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index 79678ba53..3b784320f 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -1,14 +1,14 @@ -# Evento ciclo: microtareas y macrotareas +# Loop de eventos: microtareas y macrotareas -El flujo de ejecución de JavaScript en el navegador, así como en Node.js, está basado en un *event loop* (evento ciclo). +El flujo de ejecución de JavaScript en el navegador, así como en Node.js, está basado en un *event loop* (loop de eventos). -Entender como este evento ciclo funciona es importante para optimizaciones y en algunos casos para la arquitecura correcta. +Entender como este loop de eventos funciona es importante para optimizaciones y en algunos casos para utilizar la arquitectura correcta. En este capítulo primero vamos a ver detalles teóricos acerca de como funcionan las cosas y luego veremos aplicaciones prácticas de ese conocimiento. -## Evento Ciclo +## Loop de eventos -El concepto de *evento ciclo* es muy simple. Existe un ciclo infinito en el que el motor de JavaScript aguarda por una tarea, luego ejecuta la tarea requerida y finalmente vuelve a dormir esperando por una nueva tarea. +El concepto de *loop de eventos* es muy simple. Existe un ciclo infinito en el que el motor de JavaScript aguarda por una tarea, luego ejecuta la tarea requerida y finalmente vuelve a dormir esperando por una nueva tarea. EL algoritmo general del motor: @@ -16,26 +16,26 @@ EL algoritmo general del motor: - ejecutarlas comenzando por la más antigua. 2. Dormir hasta que aparezca una tarea, luego volver a 1. -Eso es una formalización de lo que vemos cuando navegamos por una página. El motor JavaScript no hace nada la mayoría del tiempo y solo corre cuando un script/handler/evento se activa. +Eso es una formalización de lo que vemos cuando navegamos por una página. El motor JavaScript no hace nada la mayoría del tiempo y solo corre cuando un script/controlador/evento se activa. Ejemplos de tareas: - Cuando un script externo ` ``` -## Summary +## Resumen -The more detailed algorithm of the event loop (though still simplified compare to the [specification](https://html.spec.whatwg.org/multipage/webappapis.html#event-loop-processing-model)): +El algoritmo más detallado del loop de eventos (aunque aún simplificado en comparación con el [specification](https://html.spec.whatwg.org/multipage/webappapis.html#event-loop-processing-model)): -1. Dequeue and run the oldest task from the *macrotask* queue (e.g. "script"). -2. Execute all *microtasks*: - - While the microtask queue is not empty: - - Dequeue and run the oldest microtask. -3. Render changes if any. -4. If the macrotask queue is empty, wait till a macrotask appears. -5. Go to step 1. +1. Retirar de la cola y ejecutar la tarea más antigua de la cola *macrotareas* (por ejemplo, "script"). +2. Ejecutar todas las *microtasks*: + - Mientras la cola de microtareas no esté vacía: + - Retirar de la cola y ejecutar la microtarea más antigua. +3. Rendericar los cambios si los hubiera. +4. Si la cola de macrotareas está vacía, esperar hasta que aparezca una macrotarea. +5. Ejecutar el paso 1. -To schedule a new *macrotask*: -- Use zero delayed `setTimeout(f)`. +Para programar una nueva *macrotarea*: +- Usar `setTimeout(f)` con cero delay. -That may be used to split a big calculation-heavy task into pieces, for the browser to be able to react on user events and show progress between them. +Eso puede usarse para dividir una gran tarea de cálculo en partes, para que el navegador pueda reaccionar a los eventos del usuario y mostrar el progreso entre ellos. -Also, used in event handlers to schedule an action after the event is fully handled (bubbling done). +Además, se utiliza en los controladores de eventos para programar una acción después de que el evento se haya manejado por completo. -To schedule a new *microtask* -- Use `queueMicrotask(f)`. -- Also promise handlers go through the microtask queue. +Para programar una nueva *microtarea* +- Usar `queueMicrotask(f)`. +- También realizar una promesa para que los controladores pasen por la cola de microtask. -There's no UI or network event handling between microtasks: they run immediately one after another. +No hay gestión de eventos de red o de UI entre las microtareas: se ejecutan inmediatamente una tras otra. -So one may want to `queueMicrotask` to execute a function asynchronously, but within the environment state. +Por lo tanto, es posible que desee `queueMicrotask` para ejecutar una función de forma asincrónica, pero dentro del estado del entorno. ```smart header="Web Workers" -For long heavy calculations that shouldn't block the event loop, we can use [Web Workers](https://html.spec.whatwg.org/multipage/workers.html). +Para cálculos largos y pesados que no deberían bloquear el ciclo de eventos, podemos usar [Web Workers](https://html.spec.whatwg.org/multipage/workers.html). -That's a way to run code in another, parallel thread. +Esa es una forma de ejecutar código en otro hilo paralelo. -Web Workers can exchange messages with the main process, but they have their own variables, and their own event loop. +Los Web Workers pueden intercambiar mensajes con el proceso principal, pero tienen sus propias variables y su propio loop de eventos. -Web Workers do not have access to DOM, so they are useful, mainly, for calculations, to use multiple CPU cores simultaneously. +Los Web Workers no tienen acceso a DOM, por lo que son útiles, principalmente, para los cálculos, para utilizar varios núcleos de CPU simultáneamente. ``` From b5c60c171ea9c0335c0ac87df09996eaf6b893c1 Mon Sep 17 00:00:00 2001 From: joaquinelio Date: Mon, 24 Aug 2020 12:17:07 -0300 Subject: [PATCH 04/28] Update article.md --- 2-ui/99-ui-misc/03-event-loop/article.md | 1 + 1 file changed, 1 insertion(+) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index 3b784320f..4a97a1d8e 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -1,3 +1,4 @@ + # Loop de eventos: microtareas y macrotareas El flujo de ejecución de JavaScript en el navegador, así como en Node.js, está basado en un *event loop* (loop de eventos). From 57548ba9a9f0b76300601faf33cefa152c57992a Mon Sep 17 00:00:00 2001 From: joaquinelio Date: Mon, 24 Aug 2020 12:20:45 -0300 Subject: [PATCH 05/28] Update article.md --- 2-ui/99-ui-misc/03-event-loop/article.md | 1 - 1 file changed, 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index 4a97a1d8e..c6df8b333 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -265,7 +265,6 @@ alert("code"); La imagen del loop de eventos completa se ve así (el orden es de arriba a abajo, es decir: primero el script, luego las microtareas, el renderizado, etc.): - ![](eventLoop-full.svg) Todas las microtareas se completan antes de que se lleve a cabo cualquier otro manejo o renderizado o cualquier otra macrotarea. From 4b20c58bd2ab390e332a939a679013679753ef32 Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Mon, 24 Aug 2020 14:21:31 -0300 Subject: [PATCH 06/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: joaquinelio --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index c6df8b333..165ae9be0 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -5,7 +5,7 @@ El flujo de ejecución de JavaScript en el navegador, así como en Node.js, est Entender como este loop de eventos funciona es importante para optimizaciones y en algunos casos para utilizar la arquitectura correcta. -En este capítulo primero vamos a ver detalles teóricos acerca de como funcionan las cosas y luego veremos aplicaciones prácticas de ese conocimiento. +En este capítulo primero vamos a ver detalles teóricos acerca de cómo funcionan las cosas y luego veremos aplicaciones prácticas de ese conocimiento. ## Loop de eventos From 341261b45ea3b86ca25bca540f0f9bc04b79b8d2 Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Mon, 24 Aug 2020 14:21:45 -0300 Subject: [PATCH 07/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: joaquinelio --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index 165ae9be0..1714ed575 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -30,7 +30,7 @@ Las tareas son programadas --> el motor las ejecuta --> aguarda por más tareas Puede ocurrir que una tarea llegue mientras el motor está ocupado, entonces es puesta en cola. -Las tareas de una cola, también llamada "Cola de macrotarea" (Término de v8): +Las tareas forman una cola, también llamada "Cola de macrotarea" (Término de v8): ![](eventLoop.svg) From 085344af0e8e0d3f5741faac3528c4c6799703af Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Mon, 24 Aug 2020 14:21:54 -0300 Subject: [PATCH 08/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: joaquinelio --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index 1714ed575..c014c7882 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -38,7 +38,7 @@ Por ejemplo, mientras el motor está ocupado ejecutando un `script`, un usuario Las tareas de la cola son ejecutadas según la base "El que primero llega primero se atiende". Cuando el motor del navegador termina con el `script`, se encarga del evento `mousemove`, continúa con `setTimeout`, etc. -Hasta ahora bastante simple no? +Hasta ahora bastante simple, ¿no? Dos detalles más: 1. El renderizado nunca ocurre mientras el motor ejecuta una tarea. No importa si la tarea ocupa mucho tiempo. Solo se realizan cambios a DOM una vez que la tarea finaliza. From c4caff7d28554a81757867c5fc376c969f519494 Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Mon, 24 Aug 2020 14:22:27 -0300 Subject: [PATCH 09/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: joaquinelio --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index c014c7882..26c6dc223 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -42,7 +42,7 @@ Hasta ahora bastante simple, ¿no? Dos detalles más: 1. El renderizado nunca ocurre mientras el motor ejecuta una tarea. No importa si la tarea ocupa mucho tiempo. Solo se realizan cambios a DOM una vez que la tarea finaliza. -2. Si una tarea consume demasiado tiempo, el navegador puede hacer otras tareas, procesos o eventos por lo que después de un tiempo muestra una alerta "La página no responde" sugiriendo detener la tarea con la página completa. Esto ocurre cuando hay muchos calculos complejos o un error en la programación que lleva a un bucle infinito. +2. Si una tarea consume demasiado tiempo, el navegador no puede hacer otras tareas, procesos o eventos por lo que después de un tiempo muestra una alerta "La página no responde" sugiriendo detener la tarea con la página completa. Esto ocurre cuando hay muchos cálculos complejos o un error en la programación que lleva a un bucle infinito. Esa fue la teoría. Ahora veamos como podemos aplicar ese conocimiento. From 0aacae678cb2342221a95a6ee8168e5ebb9506bb Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Mon, 24 Aug 2020 14:23:34 -0300 Subject: [PATCH 10/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: joaquinelio --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index 26c6dc223..0bc4ccca2 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -78,7 +78,7 @@ function count() { count(); ``` -Puede que incluso se muestre una alerta "Un script en esta página está provocando que el navegador se ejecute con lentitud". +Puede que incluso se muestre una advertencia: "Un script en esta página está provocando que el navegador se ejecute con lentitud". Dividamos la tarea usando llamadas anidadas a `setTimeout`: From 22a01d9e12b513dbad3702e5c1b5f27294943d34 Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Mon, 24 Aug 2020 14:23:43 -0300 Subject: [PATCH 11/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: joaquinelio --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index 0bc4ccca2..9e829a6f6 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -314,7 +314,7 @@ El algoritmo más detallado del loop de eventos (aunque aún simplificado en com 5. Ejecutar el paso 1. Para programar una nueva *macrotarea*: -- Usar `setTimeout(f)` con cero delay. +- Usar `setTimeout(f)` con un retraso de cero. Eso puede usarse para dividir una gran tarea de cálculo en partes, para que el navegador pueda reaccionar a los eventos del usuario y mostrar el progreso entre ellos. From 35d6998c04aba0358636f3a604aeffe66cd0b55d Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Mon, 24 Aug 2020 14:23:55 -0300 Subject: [PATCH 12/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: joaquinelio --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index 9e829a6f6..a121baa2d 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -306,7 +306,7 @@ Aquí hay un ejemplo con la "barra de progreso de conteo", similar al que se mos El algoritmo más detallado del loop de eventos (aunque aún simplificado en comparación con el [specification](https://html.spec.whatwg.org/multipage/webappapis.html#event-loop-processing-model)): 1. Retirar de la cola y ejecutar la tarea más antigua de la cola *macrotareas* (por ejemplo, "script"). -2. Ejecutar todas las *microtasks*: +2. Ejecutar todas las *microtareas*: - Mientras la cola de microtareas no esté vacía: - Retirar de la cola y ejecutar la microtarea más antigua. 3. Rendericar los cambios si los hubiera. From 6296716809874685201812f5e2f2b1f7ea783ac5 Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Mon, 24 Aug 2020 14:24:13 -0300 Subject: [PATCH 13/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: joaquinelio --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index a121baa2d..3f5fbd204 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -322,7 +322,7 @@ Además, se utiliza en los controladores de eventos para programar una acción d Para programar una nueva *microtarea* - Usar `queueMicrotask(f)`. -- También realizar una promesa para que los controladores pasen por la cola de microtask. +- También se usan promesas para que los controladores pasen por la cola de microtareas. No hay gestión de eventos de red o de UI entre las microtareas: se ejecutan inmediatamente una tras otra. From b31143acac17294308429909332840fd4f55c808 Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Mon, 24 Aug 2020 14:27:05 -0300 Subject: [PATCH 14/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: joaquinelio --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index 3f5fbd204..8c442e5eb 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -335,5 +335,5 @@ Esa es una forma de ejecutar código en otro hilo paralelo. Los Web Workers pueden intercambiar mensajes con el proceso principal, pero tienen sus propias variables y su propio loop de eventos. -Los Web Workers no tienen acceso a DOM, por lo que son útiles, principalmente, para los cálculos, para utilizar varios núcleos de CPU simultáneamente. +Los Web Workers no tienen acceso a DOM, por lo que son útiles principalmente para cálculos, para utilizar varios núcleos de CPU simultáneamente. ``` From 5614d299205cd3486f7e6c4aeea6bd36e46836e9 Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Mon, 24 Aug 2020 14:28:03 -0300 Subject: [PATCH 15/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: joaquinelio --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index 8c442e5eb..cdaac6536 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -113,7 +113,7 @@ Una solo ejecución de `count` realiza parte del trabajo `(*)` y luego se reprog 2. La segunda cuenta: `i=1000001..2000000`. 3. ...y así sucesivamente. -Ahora, si una tarea secundaria (e.g. el evento `onclick`) aparece mientras el motor está ocupado ejecutando la parte 1, entonces es puesta en lista y ejecutada cuando la parte 1 termina, antes de la siguiente parte. Retornos periodicos al evento ciclo entre ejecuciones de `count` brinda suficiente "aire" al motor de JavaScript para hacer algo más, para reaccionar a otras acciones del usuario. +Ahora, si una tarea secundaria (por ejemplo el evento `onclick`) aparece mientras el motor está ocupado ejecutando la parte 1, entonces es puesta en lista y ejecutada cuando la parte 1 termina, antes de la siguiente parte. Retornos periódicos al ciclo de eventos entre ejecuciones de `count` brinda suficiente "aire" al motor de JavaScript para hacer algo más, para reaccionar a otras acciones del usuario. Lo notable es que ambas variantes, con y sin división de la tarea haciendo uso de `setTimeout`, son comparables en velocidad. No hay mucha diferencia en el tiempo de conteo general. From 70307f869f911c06f57b0ae47dda7c973301a9cc Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Mon, 24 Aug 2020 14:28:21 -0300 Subject: [PATCH 16/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: joaquinelio --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index cdaac6536..f45b3833d 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -152,7 +152,7 @@ Si lo ejecutas, es fácil notar que lleva bastante menos tiempo. ¿Por qué pasa esto? -Es simple: como recordarás existe un delay mínimo en el navegador de 4ms para varias llamadas anidadas a `setTimeout`. Si configuramos `0`, es `4ms` (o un poco más). Por lo que mientras antes lo programemos más rápido se ejecutará. +Es simple: como recordarás existe un retraso mínimo en el navegador de 4ms para varias llamadas anidadas a `setTimeout`. Si configuramos `0`, es `4ms` (o un poco más). Por lo que mientras antes lo programemos más rápido se ejecutará. Finalmente hemos dividido una tarea con un alto consumo de CPU en partes y ahora no bloquea la interfaz de usuario. Y el tiempo general de ejecución no es mucho mayor. From c6554dd461b086c0e095f8f66fdf140a5fae7ff6 Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Mon, 24 Aug 2020 14:28:32 -0300 Subject: [PATCH 17/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: joaquinelio --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index f45b3833d..cefa2b1a2 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -160,7 +160,7 @@ Finalmente hemos dividido una tarea con un alto consumo de CPU en partes y ahora Otro beneficio de dividir tareas pesadas para scripts de navegadores es que podemos indicar el progreso. -Usualmente el navegador renderiza al terminar la ejecución del código que actualmente se está ejecutando. No importa si la tarea conlleva demasiado tiempo. Los cambios a DOM serán aplicados solo cuando la tarea termine. +Usualmente el navegador renderiza al terminar la ejecución del código que actualmente se está ejecutando. No importa si la tarea lleva demasiado tiempo. Los cambios a DOM serán aplicados solo cuando la tarea termine. Por un lado eso es genial porque nuestra función puede crear muchos elementos, agregarlos de a uno al documento y cambiar sus estilos... el visitante no verá ningún estado intermedio, sin finalizar. Lo cuál es importante no? From f9ed8551ea9039b21cc2b0e05178d944825c9e7c Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Mon, 24 Aug 2020 14:28:47 -0300 Subject: [PATCH 18/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: joaquinelio --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index cefa2b1a2..4cb8b17a0 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -162,7 +162,7 @@ Otro beneficio de dividir tareas pesadas para scripts de navegadores es que pode Usualmente el navegador renderiza al terminar la ejecución del código que actualmente se está ejecutando. No importa si la tarea lleva demasiado tiempo. Los cambios a DOM serán aplicados solo cuando la tarea termine. -Por un lado eso es genial porque nuestra función puede crear muchos elementos, agregarlos de a uno al documento y cambiar sus estilos... el visitante no verá ningún estado intermedio, sin finalizar. Lo cuál es importante no? +Por un lado eso es genial porque nuestra función puede crear muchos elementos, agregarlos de a uno al documento y cambiar sus estilos... el visitante no verá ningún estado intermedio, sin finalizar. Lo cuál es importante, ¿no? Acá hay una demostración, los cambios a `i` no se mostrarán hasta que la función finalice, por lo que veremos solo el úlimo valor: From a10a455f6c5eb3012cd959741883e15e9af7adee Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Mon, 24 Aug 2020 14:29:01 -0300 Subject: [PATCH 19/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: joaquinelio --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index 4cb8b17a0..b4d38cd7f 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -183,7 +183,7 @@ Acá hay una demostración, los cambios a `i` no se mostrarán hasta que la func ``` -... Pero puede que queramos mostrar algo durante la tarea, e.g. una barra de progreso. +... Pero puede que queramos mostrar algo durante la tarea, por ejemplo una barra de progreso. Si dividimos la tarea más pesada en partes más pequeñas usando `setTimeout`, entonces los cambios son aplicados entre ellos. From f36184b0a27b477060af777451f98908ae0bb9a3 Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Mon, 24 Aug 2020 14:29:19 -0300 Subject: [PATCH 20/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: joaquinelio --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index b4d38cd7f..e78779bdd 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -218,7 +218,7 @@ Ahora el `
` muestra el incremento en el valor `i`, una especie de barra de ## Caso de uso 3: hacer algo después del evento -En un controlador de evento nosotros podemos decidir posponer alguna acción hasta que el evento aparezca y sea controlado en todos los niveles. Podemos hacer esto envolviendo el código en delay cero `setTimeout`. +En un controlador de evento nosotros podemos decidir posponer alguna acción hasta que el evento aparezca y sea controlado en todos los niveles. Podemos hacer esto envolviendo el código en un `setTimeout` con retraso cero. En el capítulo vimos un ejemplo: el evento personalizado `menu-open` es distribuído en `setTimeout`, de modo que ocurre después de que el evento "click" se maneja por completo. From 8029cad8038d8ab70b38614cb6a6826e9998a58b Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Mon, 24 Aug 2020 14:29:38 -0300 Subject: [PATCH 21/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: joaquinelio --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index e78779bdd..f3fe95dbf 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -242,7 +242,7 @@ Junto con las *macrotareas* descriptas en este capítulo, existen *microtareas* Las microtareas provienen únicamente de nuestro código. Por lo general, se crean mediante promesas: una ejecución del controlador `.then / catch / finally` se convierte en una microtarea. Las microtareas también se utilizan "bajo la cubierta" de "await", ya que es otra forma de manejo de promesas. -Existe también una función especial `queueMicrotask(func)` que pone en fila `func` para ejecutarla en la cola. +Existe también una función especial `queueMicrotask(func)` que pone a `func` en la cola de microtareas. **Inmediatamente después de cada *macrotarea*, el motor ejecuta todas las tareas desde la cola de *microtareas*, antes de ejecutar cualquier otra macrotarea o renderización o cualquier otra cosa.** From b0791fa7ed7e493b3efdc27fe0d6a61374258fe2 Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Mon, 24 Aug 2020 14:29:55 -0300 Subject: [PATCH 22/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: joaquinelio --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index f3fe95dbf..d51fd17af 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -303,7 +303,7 @@ Aquí hay un ejemplo con la "barra de progreso de conteo", similar al que se mos ## Resumen -El algoritmo más detallado del loop de eventos (aunque aún simplificado en comparación con el [specification](https://html.spec.whatwg.org/multipage/webappapis.html#event-loop-processing-model)): +El algoritmo más detallado del loop de eventos (aunque aún simplificado en comparación con la [especificación](https://html.spec.whatwg.org/multipage/webappapis.html#event-loop-processing-model)): 1. Retirar de la cola y ejecutar la tarea más antigua de la cola *macrotareas* (por ejemplo, "script"). 2. Ejecutar todas las *microtareas*: From ae3991337858a6f18424aae645fb18b0a66573b5 Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Mon, 24 Aug 2020 14:30:22 -0300 Subject: [PATCH 23/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: joaquinelio --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index d51fd17af..f7113d141 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -333,7 +333,7 @@ Para cálculos largos y pesados que no deberían bloquear el ciclo de eventos, p Esa es una forma de ejecutar código en otro hilo paralelo. -Los Web Workers pueden intercambiar mensajes con el proceso principal, pero tienen sus propias variables y su propio loop de eventos. +Los Web Workers pueden intercambiar mensajes con el proceso principal, pero tienen sus propias variables y su propio ciclo de eventos. Los Web Workers no tienen acceso a DOM, por lo que son útiles principalmente para cálculos, para utilizar varios núcleos de CPU simultáneamente. ``` From dfb402ef4c8dace719c704f0bd5481593b5874de Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Thu, 27 Aug 2020 21:53:18 -0300 Subject: [PATCH 24/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: Valentina VP <34555644+vplentinax@users.noreply.github.com> --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index f7113d141..e59a2e584 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -9,7 +9,7 @@ En este capítulo primero vamos a ver detalles teóricos acerca de cómo funcion ## Loop de eventos -El concepto de *loop de eventos* es muy simple. Existe un ciclo infinito en el que el motor de JavaScript aguarda por una tarea, luego ejecuta la tarea requerida y finalmente vuelve a dormir esperando por una nueva tarea. +El concepto de *loop de eventos* es muy simple. Existe un ciclo infinito en el que el motor de JavaScript espera por una tarea, luego ejecuta la tarea requerida y finalmente vuelve a dormir esperando por una nueva tarea. EL algoritmo general del motor: From 9c41276b7f3d27f57cd7f36710134b1c0655a8ef Mon Sep 17 00:00:00 2001 From: Nahuel Bustos Date: Thu, 27 Aug 2020 21:53:33 -0300 Subject: [PATCH 25/28] Update 2-ui/99-ui-misc/03-event-loop/article.md Co-authored-by: Valentina VP <34555644+vplentinax@users.noreply.github.com> --- 2-ui/99-ui-misc/03-event-loop/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-ui/99-ui-misc/03-event-loop/article.md b/2-ui/99-ui-misc/03-event-loop/article.md index e59a2e584..a31bd2c64 100644 --- a/2-ui/99-ui-misc/03-event-loop/article.md +++ b/2-ui/99-ui-misc/03-event-loop/article.md @@ -23,7 +23,7 @@ Ejemplos de tareas: - Cuando un script externo `