피드로 돌아가기
Rendering Is a Browser Decision, Not a JavaScript One
Dev.toDev.to
Frontend

Event Loop 경계를 통한 Browser Rendering 제어 원리 분석

Rendering Is a Browser Decision, Not a JavaScript One

Marsha Teo2026년 4월 30일5intermediate

Context

DOM 변경 시 즉각적으로 화면이 갱신된다는 잘못된 멘탈 모델로 인한 성능 최적화의 한계 발생. JavaScript 엔진과 Runtime의 스케줄링 규칙이 Rendering Engine의 동작 방식과 분리되어 있어 발생하는 불일치 해결 필요.

Technical Solution

  • Macrotask 실행 중 Rendering Engine의 접근을 차단하여 중간 상태 노출을 방지하는 원자적 업데이트 구조 설계
  • Microtask Queue의 완전한 비워짐(Drain)을 Rendering의 전제 조건으로 설정하여 일관된 UI 상태 유지
  • Task Boundary를 통한 Rendering 기회 생성으로 DOM Mutation과 실제 Paint 시점의 디커플링 구현
  • Synchronous 코드 및 Promise 기반 Microtask를 활용하여 불필요한 Reflow/Repaint 횟수를 최소화하는 렌더링 지연 전략 적용
  • setTimeout과 같은 새로운 Macrotask 생성을 통해 브라우저에 렌더링 제어권을 양보하는 스케줄링 방식 채택

- UI 업데이트 시 잦은 DOM 조작은 하나의 Macrotask 내로 묶어 렌더링 횟수 최적화 - 렌더링 지연이 필요한 경우 Promise.then()을 통한 Microtask 활용 검토 - 프레임 타이밍에 정밀하게 맞춘 업데이트가 필요할 경우 requestAnimationFrame 도입 고려 - 무거운 연산으로 인한 메인 스레드 점유가 Rendering 기회를 박탈하여 UI 프리징을 유발하는지 확인

원문 읽기