If you're here in 2024 (or later), here's an updated blog post!](https://lydiahallie.com/blog/event-loop)
Oh boi the event loop. It’s one o...
For further actions, you may consider blocking this person and/or reporting abuse
Hi, Lydia Hallie, it is a great article.
Can I translate this article into Chinese to help more Chinese developers(With original author and link, of course).
Absolutely!
Hi, Lydia!
This is such a great article! 😃
I was looking a clear post about this subject and yours is super comprehensive and well explained (btw, I loved the gifs). I'm planning to talk to my team about the event loop soon (in spanish).
I'm sure you might have heard about this tool that helps you play with this cycle and see in real time how it goes:
latentflip.com/loupe
woah that tool is awesome!
The tool is amazing, if we have 2 aysnc functions, the web api section will only show the latest one
Amazing tooling!!!
I tried to copy paste some code into tool and it does not save after clicking Save+Run button. Does someone else has same issue? Thanks!
Thanks for the great article and animations!
It's interesting why "event loop" question is so common on interviews, if it's job is just to transport code blocks from the queue to the call stack. I think better question would be to ask to describe how the JS mechanism works as a whole thing with call stack, web api, queue and event loop.
Interesting article! What did you use to animate the gifs?
As a true professional I use keynote and screen record it lol
Professional enough!
I'm also a visual learner, so this was very helpful. I'm still early on with JavaScript and it's challenging to understand it all; are there any books out there for us visual learner that you might recommend?
Try the book written by a John duckett
Hi Lydia. Thanks for taking the time of generating these animations in order to explain it in a very simple way. Still, I have doubts regarding the Call Stack. Is it the same as the main thread in which JS runs? I mean, I understood that, although JS is single threaded, but for the asynchronous logic that gets executed, NodeJS would spawn threads for it while processing the main logic in the single thread. Thanks in advance :)
This is a great ❓, but probably gets a bit more 'low-level' than we need to just understand the behavior of our JS code with relation to the event loop.
However, my understanding is that the JS Engine/Runtime Environment consists of only the stack and the heap. The stack is what is 🏃🏽♂️on that single thread. Meanwhile, that message queue is part of the asynchronous browser environment. So, JS's single thread runs through call stack on its single thread and then checks that mesage queue to see what else needs to be done on its thread when it has the chance.
I think in case of NodeJs, it's just the c++ Api's Insted of web/browser's Api.
Hi @avneeshroks , I have recently cloned and run the NodeJS code and effectively C/C++ are dominant.
Remember that NodeJS is on top of the V8 engine (the one used in the Chrome browser) that Google opensourced and it is natively written in C++, running in the browser and running in a server are two different environments with different purposes and indeed different APIs. NodeJS is literally running on the same engine than Chrome, but for NodeJS it is not needed to have APIs such as those for the DOM, Window, etc as Chrome needs.
I'm not a JS developer but every now and then I have to dig into it. Over the past few years I've read lots of random things about the event loop but this is the first time I've had a clear picture of what's going on in the web browser (via the web api). Thanks!
Awesome article! This has helped me a lot!
I was thinking about translating this series into Brazillian Portuguese. Do you happen to know if anyone has done it yet? Would you mind me doing it (ofc with links to the original series)
I had the same ideia. I really want to share with the team i'm part of so did you translate it or not? You found someone that did the translation of this article?
Thank you so much for the illustrations, Lydia! Very helpful, indeed!
One question: what happens when the main thread is blocked - i.e. the UI freezes? Would the whole interaction within that viewport be blocked - e.g. cursor wouldn't change after hovering a link?
I think I've never faced this situation before, so I'm curious how to identify such situation. Is there any way to simulate a huge processing in order to freeze my UI, just to see that?
Thanks in advance!
Hi, you can try this:
Execute this script, and press a lot of clicks, the clicks events will appear at the end ( because the dom events are push into the queue.
I think that what you need to take into consideration is when you are performing a task that it might take some time, that might block the UI.
In this particular case de-bouncing is useful when we click on button..
Just write a for loop which is printing millions numbers. Call this function on any click function. You will see the effect.
Hi Lydia, I love the series. Just wondering what tool did you use to make those animations? I'm also writing some tech stuff but I can't find a perfect virtualization tool to illustrate my ideas, but your animations really match what I was looking for.
Really nice article!
One thing I was confused about was
Doesn't setTimeout return an id that you can pass to clearTimeout? 🤔
Yes, It does Jonas, so lets say
thank guys to point out this detail, in the same context what's the purpose of this Id and it is used by the web API or the call stack for some purpose? thanks in advance
Great article Lydia.
Thanks so much for bring that clear explanation.
I have question here...
callstack here carry on one task then remove it, so why callback hasn't executed after popping out instanctly?
Functions are pushed into the the call stack when the callstack is empty AND there are no other line of code to be executed in the main thread... in your case it was not pushed because there was still one more thing to execute in the main thread of execution (the second hello()); Only after completing the second call to the hello function that your callback will be pushed into the callstack...
I hope this helps.
Hi, Lydia Hallie can you tell me what is the case with setInterval in call stack a combination of setTimeout and setInterval see the usecase below. Is setInterval also supposed to go to webAPI?
2000/200 = 10 times
after 2 seconds we clear setInterval id
Hi, Lydia Hallie, this is a really informative article.
Please make a similar article on event loop in Node.js if possible.
It will be of immense importance to me as I am unable to get a proper explanation with an example.
The best explanation I've ever seen, thank you for sharing!
What's the role of the HEAP that's mentioned on the first picture?
It's great article I saw. I have no more confused about it. I was trying to learn it but I can't. but Thank God, That I got your article on my browser home page. I want to also thank you daily.dev. they saw your article on my home page and I have come to your article and learned about event loop. Again Thank you so much Lydia Hallie from Omar.
Bravo! It's a great article, exactly what I was looking for showing to my team.
Just an extra consideration, it would be very cool to show a final example when we have actually more than one async item at queue. Taking into consideration different times of response for those functions.
Hi Lydia,
I'm refreshing my knowledge on the event loop and even though your article is mostly correct, it does not start strong with the incorrect statement:
This is incorrect. The
respond
will return an integer. You can easily check this yourself by doing:Thanks for the great article, Lydia! Do you mind if I translate this JS Visualizeed series into Korean with the original article and author credit? I think a lot of Korean developers would be interested in learning them.
Good post, I really appreciate the effort you do to explain the things :)
Hi Lydia
This an amazing visualization and demonstration of JavaScript event loop.
I want to ask you permission to translate this article to Persian (Iran's language) with the original post link of course so this article would be more accessible for other readers.
Sure 😃
This is the greatest article about Event Loop I've ever seen. You provided a complete explanation in a short time—perfect!
I hope you keep providing these videos, they are useful for every web developer.
Hi Lydia ,
Thanks for this useful article explaning a difficult to understand concept in a very simple way. And i want to translate it to Turkish to share in my personal blog, with linking the original author, do you have permission for this?
excelente articulo, pensar que hace unos meses no entendia nada pero guarde el articulo ya que sabia que esto era clave, y ahora de tanto repasar js vanilla, pude entender jeje saludos desde la Patagonia, argentina.
Tons of thanks for this great article and awesome animations! :)
I wonder if it would be possible to translate this article to Korean with the original post link for making this useful content be more accessible for other readers.
Great explanations and descriptions. Interesting to note that in the final example the timer value is unimportant. Someone who is unaware of how the queue works might be surprised to find that a timer value of 0 still logs "Second" last. Which is actually an easy way to yield to the UI during a long-running process if it can be continued via a timer callback, which will happen virtually immediately if the queue is empty.
Good demonstration! But a little issue exists in my opinion.
The 1st animation, when the respond() function was pushed to the call stack and executed, the setTimeout() function should be pushed into the call stack (and executed) as soon as possible, instead of waited for about 1 second. Because, as the first and only one line code inside the respond() function, the call to setTimeout( ) should be executed immediately at that time. The second argument of setTimeout(), 1000ms, has only to do with how long the timer should be waiting to add the callback to the task queue, it does not have any effect for when the setTimeout() should be pushed into the call stack.
I wish I had made this little issue clear. btw, the last animation has the same issue too. Thank you.
Nice article! Thanks for share!
What if there are no functions is the program?.lets say i have 10 instructions like variable deceleration, assignment , arthematic operations etc. Will all these instructions also go to call stack?
Var a = 10:
Var b;
b = a+ 10;
These will be executed in the global execution context... which is at the bottom of your call stack
Awesome, thanks
I just can't believe how ellaborate and simple this blog is !!!.This seriously made my day and saved me a lot of time.kudos to the writer!! I specifically created an account to make this comment to support this author.Expecting a lot of concepts to be simplified with gif's.
I was, currently and still impressed and wowwwwwed by this article. its as if this is the first time i am seeing a Promise.
Great article
Thanks for the detailed post😃.
I have a question regarding this "Luckily, the browser gives us some features that the JavaScript engine itself doesn’t provide: a Web API. This includes the DOM API, setTimeout, HTTP requests, and so on. This can help us create some async, non-blocking behavior 🚀"
Does the Web API allow us to create asynchronous behavior? Doesn't it just give us features that the JS Engine does not have?
Am I wrong saying it's rather the event loop and the callback queue that allow us to create asynchronous behavior?
I am learning through your github repository Javascript Questions.
The all I have to say you made my life It's helping me alot to understading the javascript.
In one of those questions you shared the link of this article it's just an amazing stuff you shared on github thank you so much.
Very helpful in further understanding the event loop! Thanks for posting, Lydia! :)
Muchas Gracias Lydia, aunque no pude entender tu video, el texto esta bien explicado y pude traducirlo, se que tengo que aprender Ingles, tan pronto termine el bootcamp hare un curso intensivo de Ingles, igualmente muchas Gracias por tu Articulo <3
I just wanna thank you for this amazing explanation, the first time I've read this 3 months ago, everything was new to me and blur.
Today I went on it again and it's just crystal clear too!
Thank you 3
Hey Lydia! This was amazingly explained! One thing I'm still now able to understand is what's microtasks and macrotasks! How engine prioritize those? Also how the Render/Paint queue work with the Normal queue?
Amazing!, it was so helpful, thanks
Hi, Lydia Hallie, Thank you for your great work. I want to translate your articles in Chinese to improve my English and skills😊.
Fantastic visualization. Thanks Lydia
Super nice explanation. I've learnt new things with this article. Thanks!
Thanks!
As a newbie to learning JS I appreciate your post and look forward to others.
bigleegeek
what about microtasks?
Hi Lydia,
such as great and helpful article! Would it be OK with you to translate it into German and to republish it on drweb.de/ (with your author bio, of course)?
Thank you, — Markus
Absolutely!
Thanks so much!
I don't understand why it can log undefined in here, can you pls explain more ?
this functions return nothing
Nice awesome articles and visullay explained the event loops :)
I love gifs! Thanks for explanatio ! Not programming in javascript but was very interesting ti read!
So it's safe to say the purpose of the event loop is to prevent any callback clashes? 🤔
Hm no, not really. Imagine we have 4 tasks, and the 2nd tasks needs a delay. If this delay would've happened on the main thread, nothing would've been able to run on the thread while we were waiting:
However, the web api gives us some sort of asynchronous behavior by letting us put stuff "to the side" so to say. We can now keep on running other tasks, thus keeping an interactive UI, while tasks are running in the background:
Hope this somehow made sense haha I just woke up so my illustrations may not be optimal 😜
So can we say that preventing callback clashes is the queue's job, instead of event loop's one?
Great!
Good stuff, Lydia! You have a very nice and straight-to-the-point way of expressing concepts, I'd love to read some more posts of yours, if you do have any!
Will post them soon 😎
You did a fantastic job of explaining and animating this.
Hey, Lydia! How have you been? Awesome article!!
Can I translate this article series into Portuguese? (With original author and link, of course).
Images off
i read it 1month earlier thank you for quick revision it,s great your written article feel like somebody teaching in front of me easy english
Hey Lydia, just wanted to say a huge thank you for this series. I really appreciate it and now I feel like I've got a good grasp on these JavaScript concepts.
Thanks!!!! This article is amazing 👏👏👏
The Best.
Hi, Hallie, I think you can add 'async/await' execute in the gif.
Looks like "What the heck is the event loop anyway?" by Philip Roberts | JSConf EU
https://www.youtube.com/watch?v=8aGhZQkoFbQ&vl=en
This is really usuful, the graphics help a lot 🤗
Hi @lydiahallie , thank you for your super comprehensive explanation. All of the gifs are incredible, helped me a lot to understand more about javascript under the hood.
Thanks for a great article series. 👍
Amazing, really like you visualization
Hi @lydiahallie It was an amazing article and animations.
How did you create those animations?
Super helpful and well written.
Thanks for taking your time to share this with us.
nice****
Hello , Lydia Hallie, it is a great article.
Can I translate this article into Uzbek to help more Uzbek developers(With original author and link, of course). too
Very informative. Hats off to the explanation!!!
Can I translate your article to a Chinese technical website? , will comment the original link
Tnx for your effort.
Wow, nicely explained :D
You explained this beautifully! Thank you!
I love it! I’m a visual learner too so this helps a lot! Keep going! o/
Super helpful! I love this!
It is a very visual and great, easy to understand, you saved my life.
Hungry to read these kind of posts.
Love your post!!!!
Wow...
Amazing article for and amazing topic of JS by an amazing writer with an amazing explanation.
thanks for sharing this.
This is fantastic!
Wow, Great Contet, thanks for sharing it!
Great Visuals, Thank you
Great article and animations!
This is a Great job.It makes really easy to understand the concept.
Thanks!
Now it time to add the promise's micro queue! :)
Great Article Lydia, make this kind of Articles ❤️
Wow. This is so helpful since JS is really challenging. Thanks for the effort.
Thank You so Much !!
Hi, Lydia!
You are the best!
👍 the best one explained event loop ➿
hi Lydia
you mentioned "web API" so what do you mean "web API"? I don't understand what is "web API" , which you are referring to?
Hi, Lydia Hallie
you mentioned "web API" so what do you mean "web API"? I don't understand what "web API" is, which you are referring to?
This is the best article on event loop I have encounter so far.
Thank you so much for making it so wasy for us :-)
Great article. JS is so hard to learn
Gifs are so explicit. You really explained everything perfectly
Glad to find such a gem !
Thanks a lot Lydia!
Thanks for the great article.
The visualization helps so much! Thank you very much for putting the time into this.
This is one of the best articles I've seen on Event Loop. Thanks, Lydia for sharing :)
Fantastic 👍
And finally i started to understand how the event loop works, thanks a loooot. I've been reading for days feeling confusing. Great job with those gif, love it.
This is a great article, thanks for sharing!
Wow
Nice, thank for you...love you <3
Great job! Here's a deep dive from another presenter: latentflip.com/loupe - and with a live app to show the visualizations.
Thanks for this article and also the others. Awesome explanation and awesome GIFs! Cool idea. I hope you have a nice day! :)
Thank you for sharing, it's really interesting!
Great article, amazing animations makes me understand the topic easily.
It's a gift of the Gods for a visual learner like me. Thanks for this ultra helpful article.
These series are such a pearl. Thanks for creating them. I am very happy to have found them.
Hey Lydia, what about event listeners/callbacks? How do they work internally?
Fantastic article. Love the way you explain things step-by-step.
Great post! Worths mentioning the job or microtask queue (promises) that has higher priority than the callback queue.
Great article, thanks! Could you please explain macro task and micro task in this visual way? It can definitely help others!
Great article!
Have you heard of loupe? latentflip.com/loupe/
Super clear explanation. Thanks for sharing this.
Hi Lydia Hallie,
I'm gonna make a presentasion and tell this subject to other students like me in my class. Can I use your gif images :)
Lydia, thank you for breaking this down for us! As a visual learner, this is gold!
Awesome. Great Job!
Super nice article. Thank you for writing the post😊
I want to translate this post series into Korean. May I do this leaving the link and original author?
Lydia, big thanks, I have been coding for a while now, always wished I had some visual guidance at the start of my career and here you are. BIG THANKS AND HUGE RESPECT.
Hello Lydia,
I really appreciate you piece of work. Congratulations.
good good good...these visualizations are fabulous !!
Hi, thank you for great article.
Can I translate this series into Korean in my blog? (of course with original author & link)
Hi, Lydia, it is a great article.
Great article, Thanks.
Superb!
Still learning Java. It's little bit difficult for me. I used it on my project Infinite Craft
The article is excellent and the video explanation is truly remarkable.!
I really love this article...
My mind is blown. 🤯
😅
This article is very used fully for me. Thank you Lydia Hallie. 🙂
Hi, Lydia.
Your article was of great help in understanding javascript.
Could I upload your article in Korean translation?
It would greatly help other Korean developers !!
Great Series! Love them, what did you use to create your animations?
This is so COOL! What did you used in order to do the animations?
Great article Lydia!
Hi, Lydia Hallie, it's good article
Great article! Thanks.
Hi.
This is interesting article!!!
So, i want translate Korean.....
Is it possible?
Great article
Thanks Lydia
thanks @lydiahallie
thank you so much . it was very helping ..
Nicely explained.. thank you so much
Thanks for putting these together! I've been reading about some of this stuff and this really helps it click.
please i need to know how it works with more than async operation
such as 2 of setInterval or 2 of setTimeout
Thank you
The GIF you put just, make my things so loud and clear, thank you so much.
awesome content!
very insightful thank you
Lydia, what about event callbacks like click, scroll. How do they work?
wow!
Hi, Lydia Hallie, it is a great article.
Thanks so much, finally i understand it.
This article helped me to remember what I read in a book in just 5 minutes, thanks Lydia. I consider myself a visual learner.
Thanks a lot! It doesn't look scary anymore
Why does event loop makes sure the call stack is empty , if there is already a callback function inside queue waiting to be invoked?
Thank you Lydia Hallie fo this article
great article, thank you very much
Hi, Lydia, i think this is the best post to get the JS loop behind the scenes.
Can I translate this post, and publish it on my blog, with credits to the author and direct link?
Thanks for posting!
Awesome!