피드로 돌아가기
Dev.toFrontend
원문 읽기
OffscreenCanvas와 Web Worker 기반의 Non-blocking PDF 이미지 추출 파이프라인 설계
Stop the Lag: Optimizing Heavy Browser-Based PDF Image Extraction
AI 요약
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 함수 호출