Minifier
JavaScript 미니파이케이션은 사용자에게 전송되는 데이터량을 줄여 페이지 로드를 빠르게 하므로 웹사이트 성능 최적화에 핵심적인 역할을 합니다. 특히 이커머스에서는 수 초 차이가 수백만 달러 규모의 경제적 가치와 맞먹을 수 있습니다.
하지만 기존 미니파이어들은 보통 압축률과 속도 사이에서 타협이 필요했습니다. 최상의 압축에는 가장 느린 도구를, 더 낮은 압축에는 가장 빠른 도구를 선택해야 했습니다. 그런데 압축 수준을 희생하지 않으면서도 더 빠른 미니파이어를 만들 수 있다면 어떨까요?
프로젝트 목표
우리는 google-closure-compiler, terser, esbuild, tdewolff-minify 등 검증된 미니파이어의 테스트 사례를 이식하여 이 목표를 달성하는 프로토타입을 적극적으로 개발하고 있습니다.
예비 결과만으로도 목표를 향해 가고 있는 것으로 보입니다. Oxc 미니파이어로 압축 품질을 잃지 않으면서도 더 빠른 미니파이 시간을 기대할 수 있습니다.
목표 성능
- 속도: Terser보다 빠르고, esbuild와 경쟁 수준
- 압축: Terser의 압축률과 동등하거나 그 이상
- 정확성: 주요 미니파이어 테스트 스위트를 모두 통과
아키텍처 개요
설계 원칙
Oxc 미니파이어는 다음 원칙을 중심으로 구축됩니다.
- 의미론 인지(Semantic-Aware): 의미 분석으로 안전한 최적화를 수행합니다.
- 증분형(Incremental): 증분 컴파일 워크플로에 맞게 설계되었습니다.
- 구성 가능(Configurable): 다양한 최적화 수준과 타깃을 지원합니다.
- 정확성(Correct): 공격적인 최적화보다 정확성을 우선합니다.
현재 상태
구현된 기능
- ✅ 데드 코드 제거(DCE): 도달할 수 없는 코드 제거
- ✅ 상수 폴딩: 상수 식을 계산해 치환
- ✅ 트리 쉐이킹: 사용하지 않는 export 제거(기본)
- ✅ 변수 병합: 변수 선언 병합
- ✅ 문장 병합: 호환되는 문을 결합
- ✅ 이름 맹글링: 변수·함수 이름 단축
- ✅ 제어 흐름 최적화: 제어 구조 단순화
- ✅ 함수 인라이닝: 작은 함수를 인라인
- ✅ 고급 트리 쉐이킹: 모듈 간 최적화
성능 최적화
성능을 유지하기 위한 핵심 전략:
- 최소 AST 순회: 여러 최적화를 한 번의 패스로 결합
- 효율적인 자료 구조: arena 할당과 컴팩트한 표현
- 조기 종료: 이득이 없을 때 최적화를 건너뜀
자료
문서
외부 참고
플레이그라운드
- esbuild: https://esbuild.github.io/try
- rollup: https://rollupjs.org/repl
- swc: https://play.swc.rs
- terser: https://try.terser.org
- closure compiler: https://jscompressor.treblereel.dev
- 공식 웹 서비스는 더 이상 제공되지 않음: Closure Compiler Webservice Turndown - 2025