Latest / Entre Chaves / Snippet #11 Event Loop explicado com exemplos práticos de desenvolvimento
Transcript
- 0:09Oi, pessoal, eu sou a Júlia, analista de software aqui na DT
- 0:12digital, e eu já quero explicar de uma forma simples, um
- 0:15conceito muito importante do JavaScript, que é o event loop.
- 0:18Quando eu era estagiária, eu já quebrei muito a cabeça tentando
- 0:21entender por que que uma parte do meu código eu estava
- 0:23executando antes da outra, ou por que que o estado não estava
- 0:26sendo atualizado em determinado momento.
- 0:28E entender como o JavaScript funciona por baixo dos panos,
- 0:31ainda muito a evitar esse tipo de problemas.
- 0:33Então, o JavaScript, ele é uma linguagem single Trad, ou seja,
- 0:37ele só executa uma coisa por vez.
- 0:40Então surge a dúvida, né? Como que ele consegue lidar com
- 0:43várias coisas ao mesmo tempo, que é a forma que a gente lida
- 0:46com ele na prática. Nos front end, por exemplo, onde
- 0:49você tem requisições HTTP, tem os times ou eventos de clique do
- 0:53usuário, tudo ocorrendo ali ao mesmo tempo, sem que nada fique
- 0:57travado, e tudo isso está relacionado ao event loop.
- 1:01Uma forma simples de entender é imaginar um restaurante com
- 1:04apenas um cozinheiro. Esse cozinheiro, ele só consegue
- 1:07fazer um prato por vez. Isso seria a cause tech do
- 1:10JavaScript, que é onde o código é executado.
- 1:13Agora imagina que um pedido chega e ele precisa ficar em 20
- 1:16minutos no forno assando? Cozinheiro não vai ficar ali
- 1:20parado esperando esse prato. Fica pronto, ele vai colocar o
- 1:23prato no forno e vai continuar fazendo os outros pedidos.
- 1:27No JavaScript, as tarefas mais demoradas, como as requisições
- 1:30ou times, elas funcionam de forma parecida.
- 1:33Quando o JavaScript encontra uma operação, é síncrona, como um
- 1:36set timeout ou uma requisição HTTPO evento de click, ela é
- 1:40enviada para o chamado web APIs, que são funcionalidades do
- 1:43ambiente, como o navegador. E quando essa tarefa termina,
- 1:47ela não volta direto para o código, ela vai para uma fila
- 1:50chamada teste kill. O event loop é responsável por
- 1:53coordenar tudo isso. Ele fica o tempo todo ali
- 1:56verificando a caostex está vazia.
- 1:58Se estiver, ele pega a próxima tarefa da fila e coloca na pilha
- 2:02de execução. Ou seja, ele garante que o
- 2:05JavaScript continue rodando de forma organizada, mesmo lidando
- 2:08com essas tarefas das síncrones. O exemplo simples e clássico de
- 2:12código é você colocar um console ponto log da letra a, depois
- 2:16definir um site timeut com time zero, colocando um console ponto
- 2:20log da letra BE. Por último, um console log da
- 2:23letra c. Quando você rodar esse código, o
- 2:26resultado que você vai obter é o log da letra ACE por último da
- 2:31letra b, porque o set timeout vai primeiro para as webb pias e
- 2:36depois pra fila de execução. Agora, um detalhe muito
- 2:39importante é que o event Luck não trabalha apenas com uma fila
- 2:43e existem 2 tipos principais, que é até onde entram coisas
- 2:47como o set timeout e a microtest que eu onde ele vai entrar
- 2:51proms, por exemplo. Então as microtestes, elas vão
- 2:54ter prioridade sobre as testes. Ou seja, antes de executar uma
- 2:58test Quill, o event loop executa todas as microtest.
- 3:02Então, se a gente pegar esse primeiro exemplo, onde a gente
- 3:04tem o console log a, depois o time out com a letra BE, ali a
- 3:08gente adicionar uma promise no ponto DNA, gente dá um console
- 3:11ponto log da letra CE. Por último, o console log da
- 3:14letra DA ordem que isso vai aparecer quando a gente executar
- 3:18o código será ADCEB. Porque o ponto de entra na
- 3:22microtesc kil que é executada antes da tesc kil entender isso
- 3:27impacta diretamente no dia a dia.
- 3:29Por exemplo, para evitar buts de ordem de execução onde o código
- 3:33não roda na sequência que você espera, né?
- 3:35Você conseguir organizar o seu código de forma que você
- 3:38gerencie as operações. Assim, pra que você tenha um
- 3:41dado da forma que você espera. No momento em que você espera,
- 3:44você não ter problemas de variáveis que ainda não foram
- 3:46preenchidos porque uma promícia ainda não resolveu.
- 3:49Comportamentos inesperados em firm works como react,
- 3:52principalmente quando você está ali lidando com o Youse state ou
- 3:56o Youse effect, e até problemas de performance quando você
- 3:59bloqueia a execução com o código síncrono pesado, por exemplo, um
- 4:03IO true, um IO ali que demora muito para completar.
- 4:06Então quando você entende o event luoping, você consegue
- 4:09prever melhor o comportamento do seu código.
- 4:12O que faz muita diferença quando você tá ali programando e
- 4:15estruturando o seu código. Então entender o event loop é
- 4:18entender como JavaScript funciona por baixo dos panos,
- 4:21que é essencial pra gente que é desenvolvedor.
- 4:24Espero que tenha ajudado e até uma próxima.