20.웹브라우저 동작원리 - ES6

Updated:


image

  • stack 에 담아서 코드를 실행 하는데 JS 는 특징이 하나의 스택에서 하나의 코드씩 실행 시키기 때문에 보통 single threaded 방식이라고 합니다.

  • 그래서 setTimeout() 같이 실행이 오래걸리는 code 를 만날경우 바로 실행이 안되기 때문에 stack 에서 빼서 대기하고 다음 code 로 바로 넘어가버립니다.

🔑 위에 stack 에서 처리안하고 대기상태로 보내는 코드 형태는 다음과 같습니다.

  • Ajax 요청 코드

  • EventLister

  • SetTimeout() 등 시간이 걸리는 code 들

🔷 대기를 끝낸 코드는 stack 에 바로 다시 담겨지는것이 아니라 순서대로 Queue 에 저장되서 순서대로 하나씩 stack 에 저장된다고 보면 됩니다. (**단!! Stack 이 처리작업을 마친 후, 즉

비어 있을때, queue 에서 stack 으로 옴겨진다고 보면 됩**)

📌 Q. 만약 setTimeout() 의 시간을 0초로 하면 바로 실행되는것인가?

=> No, stack 에서 setTimeout() 의 함수는 무조건 대기상태로 밀어 버리고, Queue 를 통해 stack 으로 와서 처리를 하게 됨

SumUp

  • JS 로 code 시, 시간이 오래 걸리는 연산 또는 반복문이 길면(몇만번) 하게 되면 중간에 대기실로 보내는 것들 (Ajax, EventLister 등) 이 실행이 안되고 계속 queue 에서 대기상태로 있게 됨 (왜냐면 stack 에서 code 처리를 끝내야 되기 때문에..)

  • Queue 에 대기하는 code 도 마찬가지로 대기를 오래하게 되면 웹사이트 동작시 시간이 오래 걸리게 됨

JS 는 동기 vs 비동기

  • 원래 자바스크립트 동기적으로 처리됩니다. 한번에 한줄 순서대로 실행됩니다. (Stack 은 하나밖에 없기 때문에)

  • 가끔 JS 는 비동기적인 처리도 가능합니다. (setTimeout, Eventlister, ajax 함수등을 쓰면 됩니다.)

🔶 🔷 📌 🔑

Reference

Leave a comment