피드로 돌아가기
Stop the Lag: Optimizing Heavy Browser-Based PDF Image Extraction
Dev.toDev.to
Frontend

OffscreenCanvas와 Web Worker 기반의 Non-blocking PDF 이미지 추출 파이프라인 설계

Stop the Lag: Optimizing Heavy Browser-Based PDF Image Extraction

Trần Xuân Ái2026년 5월 29일5intermediate

Context

클라이언트 사이드 PDF 처리 시 발생하는 Main Thread 점유로 인한 UI Freeze 및 Heap Memory Overflow 문제 분석. 대용량 Blob 디코딩과 비트맵 조작 과정에서 Garbage Collection 지연으로 인한 브라우저 탭 크래시가 주요 병목 지점으로 작용.

Technical Solution

  • Main Thread 부하 제거를 위한 Web Worker 기반의 비동기 처리 파이프라인 구축
  • OffscreenCanvas 도입을 통한 Worker Thread 내 렌더링 작업 수행으로 UI 응답성 확보
  • Transferable Objects 활용으로 데이터 복사 비용을 제거한 저지연 메모리 전송 구조 설계
  • 전체 PDF 일괄 처리가 아닌 Page-level Chunking 기반의 순차적 프로세싱 적용
  • URL.revokeObjectURL() 및 명시적 Reference Nullification을 통한 메모리 누수 방지 라이프사이클 관리
  • High-DPI 렌더링 비용 최적화를 위한 사용자 정의 해상도 조절 옵션 제공

1. 무거운 바이너리 처리 로직을 Web Worker로 분리하여 Main Thread 이벤트 루프 확보

2. 대용량 데이터 전송 시 구조 분해 복사가 아닌 Transferable Objects 적용 검토

3. 반복적인 캔버스 렌더링 시 OffscreenCanvas를 통한 백그라운드 처리 구현

4. 루프 내부에서 생성되는 Blob/Object URL의 즉시 해제(Revoke) 프로세스 강제화

5. 메모리 집약적 작업에 대해 Chunk 단위 처리 및 명시적 메모리 cleanup 함수 호출

원문 읽기