피드로 돌아가기
ReactJs Performance ~ Web Workers for Heavy Computations ~
Dev.toDev.to
Frontend

Web Worker 도입을 통한 Main Thread 블로킹 제거 및 60 FPS UI 유지

ReactJs Performance ~ Web Workers for Heavy Computations ~

Ogasawara Kakeru2026년 5월 3일3intermediate

Context

JavaScript의 Single Thread 구조로 인한 고부하 작업 시 UI Freeze 발생. CPU-intensive 작업이 Main Thread를 점유함에 따른 사용자 경험 저하 해결 필요.

Technical Solution

  • Web Worker를 통한 무거운 연산 로직의 Background Thread 분리 설계
  • PostMessage 기반의 비동기 메시징 체계를 통한 Main Thread와 Worker 간 데이터 교환
  • React useEffect 내 Worker 인스턴스 생명주기 관리를 통한 메모리 누수 방지 및 Resource Cleanup 구현
  • 데이터 직렬화 및 역직렬화 비용을 고려한 50ms 기준의 작업 분리 임계치 설정
  • Comlink 및 Vite/Webpack 설정을 통한 Worker 통신 보일러플레이트 제거 및 개발 생산성 향상

Impact

  • Image filtering 및 Data sorting 등 고부하 작업 중에도 60 FPS UI Smoothness 유지
  • 최대 1,200ms 소요되는 Physics simulations의 비동기 처리를 통한 UI Freeze 완전 제거
  • 메시지 전달에 따른 5~10ms 수준의 레이턴시 발생에도 불구하고 전체 응답성 확보

Key Takeaway

연산 복잡도가 높은 작업은 Main Thread에서 분리하여 UI 렌더링 파이프라인의 연속성을 보장하는 아키텍처 설계가 핵심임.


- 단일 작업 처리 시간이 50ms를 초과하는지 확인 - DOM 직접 접근이 필요한 로직이 Worker 내부로 포함되지 않았는지 검토 - SharedArrayBuffer 사용 여부를 통해 메모리 격리 비용 최적화 고려 - 단순 비동기 작업의 경우 requestIdleCallback 적용 가능성 우선 검토

원문 읽기