피드로 돌아가기
60fps Real-Time Graphics: OffscreenCanvas in Next.js ⚡
Dev.toDev.to
Frontend

OffscreenCanvas 도입을 통한 Main Thread 병목 제거 및 60fps 렌더링 달성

60fps Real-Time Graphics: OffscreenCanvas in Next.js ⚡

Prajapati Paresh2026년 6월 9일3intermediate

Context

고빈도 금융 차트 및 실시간 텔레메트리 데이터 시각화 시 발생하는 DOM Bloat 및 Main UI Thread 점유 문제 분석. JavaScript의 싱글 스레드 특성으로 인한 렌더링 루프와 사용자 상호작용 간의 자원 경합 및 프레임 드롭 현상 발생.

Technical Solution

  • OffscreenCanvas API를 활용한 Canvas 제어권과 메인 DOM 워크스페이스의 완전한 분리 설계
  • Web Worker 기반의 전용 백그라운드 스레드 구축을 통한 그래픽 계산 및 페인트 루프 이관
  • transferControlToOffscreen() 메서드를 통해 Canvas 객체를 복사가 아닌 소유권 이전 방식으로 Worker에 전달
  • 메인 스레드에서는 구조적 셸(Shell)만 유지하고, 실제 픽셀 렌더링은 격리된 Execution Thread에서 수행하는 Decoupled Painting 구조 채택
  • 16ms 간격의 고빈도 데이터 스트림을 Worker로 직접 전송하여 UI 인터랙션과 렌더링 파이프라인 간의 간섭 제거

- 실시간 데이터 시각화 시 Main Thread의 Event Loop 차단 여부 확인 - Canvas 렌더링 부하가 높을 경우 Web Worker와 OffscreenCanvas 도입 검토 - 객체 전달 시 Structured Clone 대신 Transferable Objects를 사용하여 오버헤드 최소화 여부 점검

원문 읽기