피드로 돌아가기
Dev.toInfrastructure
원문 읽기
HTMLRewriter 도입으로 CPU 사용량 2ms 달성 및 번들 크기 99.6% 절감
Cloudflare Workers HTML to Markdown on the Free Plan
AI 요약
Context
AI Crawler 대상의 효율적인 컨텐츠 제공을 위해 HTML의 Markdown 변환 필요성 증대. Cloudflare Workers Free Plan의 10ms CPU 제한과 1MB 번들 크기 제약으로 인해 기존 DOM 기반 파싱 라이브러리 채택 불가.
Technical Solution
- 메모리에 전체 DOM 트리를 구축하는 Buffer 방식 대신 바이트 스트림 기반의 SAX-style 파싱 방식 채택
- Runtime 내장 도구인 HTMLRewriter 활용을 통한 외부 npm 의존성 제거 및 번들 크기 최소화
- 특정 HTML 태그 매칭 시 텍스트 노드로 Markdown 문법을 삽입하는 스트리밍 변환 로직 설계
- 불필요한 태그 제거와 컨텐츠 유지(removeAndKeepContent)를 병행하여 효율적인 문자열 생성
- DOM 트리 탐색 과정의 CPU 오버헤드를 제거하여 엣지 런타임 내 처리 속도 극대화
Impact
- CPU 사용량: 중앙값 2ms 기록하여 Free Plan 제한치(10ms)의 20% 수준으로 최적화
- 번들 크기: 3.74 KiB(gzipped)로 제한치(1MB) 대비 0.4% 수준의 극소량 리소스 점유
- 성능 여유: 기존 DOM 기반 라이브러리 대비 CPU 헤드룸 5배, 번들 헤드룸 250배 확보
Key Takeaway
제한된 리소스 환경에서는 Full DOM 모델링보다 이벤트 기반 스트리밍 처리 방식이 성능과 메모리 효율 면에서 압도적임.
실천 포인트
1. Serverless 환경의 메모리/CPU 제한 확인
2. 전체 문서 로드 방식(DOM)과 스트리밍 방식(SAX)의 트레이드오프 분석
3. 런타임 내장 API(Native API) 우선 검토를 통한 의존성 및 번들 크기 최적화
4. 정교한 변환(Round-trip) 필요 시 Paid Plan 전환 고려