호출 스택(Call Stack)
마이크로태스크 큐(Microtask Queue)
Promise.then(), queueMicrotask(), MutationObserver 매크로태스크 큐(Macrotask Queue)
setTimeout(), setInterval(), I/O 콜백, UI 이벤트 이벤트 루프(Event Loop)
포인트!
- 마이크로태스크는 매크로태스크보다 우선 실행
- 브라우저는 렌더링 직전에도 마이크로태스크를 비웁니다
console.log('A');
setTimeout(() => {
console.log('B');
}, 0);
Promise.resolve()
.then(() => console.log('C'))
.then(() => console.log('D'));
console.log('E');
A 출력
setTimeout 콜백 → 매크로태스크 큐 등록
Promise.then 콜백 → 마이크로태스크 큐 등록
E 출력
스택이 비면
마이크로태스크 처리 → C, D
매크로태스크 처리 → B
- 과도한 동기 작업은 UI 프리징을 유발할 수 있음
- 마이크로태스크를 지나치게 많이 등록하면 매크로태스크 실행이 지연될 수 있음