Skip to content

Minifier

JavaScript 미니파이케이션은 사용자에게 전송되는 데이터량을 줄여 페이지 로드를 빠르게 하므로 웹사이트 성능 최적화에 핵심적인 역할을 합니다. 특히 이커머스에서는 수 초 차이가 수백만 달러 규모의 경제적 가치와 맞먹을 수 있습니다.

하지만 기존 미니파이어들은 보통 압축률과 속도 사이에서 타협이 필요했습니다. 최상의 압축에는 가장 느린 도구를, 더 낮은 압축에는 가장 빠른 도구를 선택해야 했습니다. 그런데 압축 수준을 희생하지 않으면서도 더 빠른 미니파이어를 만들 수 있다면 어떨까요?

프로젝트 목표

우리는 google-closure-compiler, terser, esbuild, tdewolff-minify 등 검증된 미니파이어의 테스트 사례를 이식하여 이 목표를 달성하는 프로토타입을 적극적으로 개발하고 있습니다.

예비 결과만으로도 목표를 향해 가고 있는 것으로 보입니다. Oxc 미니파이어로 압축 품질을 잃지 않으면서도 더 빠른 미니파이 시간을 기대할 수 있습니다.

목표 성능

  • 속도: Terser보다 빠르고, esbuild와 경쟁 수준
  • 압축: Terser의 압축률과 동등하거나 그 이상
  • 정확성: 주요 미니파이어 테스트 스위트를 모두 통과

아키텍처 개요

설계 원칙

Oxc 미니파이어는 다음 원칙을 중심으로 구축됩니다.

  1. 의미론 인지(Semantic-Aware): 의미 분석으로 안전한 최적화를 수행합니다.
  2. 증분형(Incremental): 증분 컴파일 워크플로에 맞게 설계되었습니다.
  3. 구성 가능(Configurable): 다양한 최적화 수준과 타깃을 지원합니다.
  4. 정확성(Correct): 공격적인 최적화보다 정확성을 우선합니다.

현재 상태

구현된 기능

  • 데드 코드 제거(DCE): 도달할 수 없는 코드 제거
  • 상수 폴딩: 상수 식을 계산해 치환
  • 트리 쉐이킹: 사용하지 않는 export 제거(기본)
  • 변수 병합: 변수 선언 병합
  • 문장 병합: 호환되는 문을 결합
  • 이름 맹글링: 변수·함수 이름 단축
  • 제어 흐름 최적화: 제어 구조 단순화
  • 함수 인라이닝: 작은 함수를 인라인
  • 고급 트리 쉐이킹: 모듈 간 최적화

성능 최적화

성능을 유지하기 위한 핵심 전략:

  1. 최소 AST 순회: 여러 최적화를 한 번의 패스로 결합
  2. 효율적인 자료 구조: arena 할당과 컴팩트한 표현
  3. 조기 종료: 이득이 없을 때 최적화를 건너뜀

자료

문서

외부 참고

플레이그라운드