피드로 돌아가기
Deep Dive: How React 19 Works in Browser Extensions with Content Scripts and Background Workers
Dev.toDev.to
Frontend

React 19 도입으로 브라우저 확장 프로그램 메모리 오버헤드 42% 절감

Deep Dive: How React 19 Works in Browser Extensions with Content Scripts and Background Workers

ANKUSH CHOUDHARY JOHAL2026년 4월 28일23advanced

Context

React 18 기반 확장 프로그램의 Content Script는 메모리 오버헤드가 높고 호스트 페이지의 CSS/JS와 충돌하는 구조적 한계 존재. 특히 Manifest V3의 Background Worker와 상태를 동기화하기 위해 외부 라이브러리를 도입함에 따라 번들 크기 증가와 동기화 지연 시간 발생하는 문제 직면.

Technical Solution

  • Shadow DOM 네이티브 지원을 통한 호스트 페이지 스타일 격리 및 렌더링 충돌 방지 설계
  • Offscreen API 기반의 Concurrent Rendering을 적용하여 비활성 컴포넌트 트리 렌더링 일시 중단 및 리소스 최적화
  • useSyncExternalStore 표준 훅 활용을 통한 Background Worker와 Content Script 간의 효율적인 상태 동기화 체계 구축
  • react-reconciler의 Concurrent Mode 기본 설정을 통한 DOM 조작 시 메인 스레드 차단 최소화
  • 외부 상태 관리 라이브러리를 제거하고 메시지 패싱 기반의 Batch Update 최적화 로직 구현

Impact

  • React 18 대비 Content Script 메모리 오버헤드 42% 감소
  • Offscreen API 적용으로 First Paint Latency 평균 68ms 단축
  • Background Worker 오프로딩을 통한 CPU 사용률 31% 절감
  • 번들 크기 32kB(gzipped)로 React 18 대비 12% 감소 및 전체 패키지 크기 20% 최적화

Key Takeaway

프레임워크의 Concurrent Feature를 도메인 특화 환경(Browser Extension)의 생명주기에 매핑하여 외부 라이브러리 의존성 없이 성능을 극대화하는 설계 전략


- Manifest V3 환경에서 상태 동기화 시 Zustand 대신 useSyncExternalStore 검토 - Content Script 삽입 시 Shadow DOM 컨테이너를 사용하여 호스트 페이지 간섭 배제 - 사용자 인터랙션에 따라 숨겨지는 UI 요소에 Offscreen API를 적용하여 렌더링 비용 절감 - ES2020 미지원 레거시 브라우저 타겟팅 시 Babel Polyfill 추가 설정 확인

원문 읽기