Closure Compiler 컴파일 수준

Closure Compiler를 사용하면 공백과 주석의 간단한 삭제부터 적극적인 코드 변환에 이르기까지 세 가지 수준의 컴파일 중에서 선택할 수 있습니다.

WHITESPACE_ONLY

WHITESPACE_ONLY 컴파일 수준은 코드에서 주석을 삭제하고 줄바꿈, 불필요한 공백, 불필요한 문장 부호 (예: 괄호 및 세미콜론) 및 기타 공백도 삭제합니다. 출력 JavaScript는 소스 JavaScript와 기능적으로 동일합니다.

요청된 출력 언어 모드가 입력 언어 모드와 다른 경우 언어 기능의 트랜스파일은 계속 발생합니다. 플래그 및 옵션--language_in--language_out을 참고하세요.

이 컴파일 수준은 세 가지 수준 중 압축률이 가장 낮습니다.

SIMPLE_OPTIMIZATIONS

SIMPLE_OPTIMIZATIONS 컴파일 수준은 WHITESPACE_ONLY와 동일한 공백 및 주석 삭제를 실행하지만, 로컬 변수와 함수 매개변수를 더 짧은 이름으로 바꾸는 등 표현식과 함수 내에서도 최적화를 실행합니다. 변수 이름을 더 짧은 이름으로 바꾸면 코드가 훨씬 작아집니다. SIMPLE_OPTIMIZATIONS 수준에서는 함수에 로컬인 심볼만 이름이 바뀌므로 컴파일된 JavaScript와 다른 JavaScript 간의 상호작용을 방해하지 않습니다.

SIMPLE_OPTIMIZATIONS를 사용한 컴파일은 코드에서 문자열 이름을 사용하여 지역 변수에 액세스하지 않는 경우 (예를 들어 eval() 문을 사용하거나 함수에서 toString을 호출하여) 구문상 유효한 JavaScript의 기능을 항상 유지합니다.

SIMPLE_OPTIMIZATIONS은 기본 컴파일 수준입니다.

ADVANCED_OPTIMIZATIONS

ADVANCED_OPTIMIZATIONS 컴파일 수준은 SIMPLE_OPTIMIZATIONS와 동일한 변환을 실행하지만 세 수준 중 가장 높은 압축을 달성하기 위해 다양한 더 적극적인 전역 변환을 추가합니다. ADVANCED_OPTIMIZATIONS 수준은 다른 도구로 가능한 것보다 훨씬 더 효과적으로 JavaScript를 압축합니다.

이러한 극단적인 압축을 사용 설정하기 위해 ADVANCED_OPTIMIZATIONS는 컴파일된 코드에 관해 강력한 가정을 합니다. 코드가 이러한 가정을 따르지 않으면 ADVANCED_OPTIMIZATIONS에서 실행되지 않는 코드를 생성합니다.

예를 들어 ADVANCED_OPTIMIZATIONS로 컴파일된 코드는 상호 운용성을 보장하기 위한 특별한 단계를 거치지 않는 한 컴파일되지 않은 코드와 함께 작동하지 않을 수 있습니다. 코드에서 참조되는 외부 함수와 속성에 플래그를 지정하지 않으면 Closure Compiler가 코드의 참조 이름을 부적절하게 변경하여 코드의 이름과 외부 코드의 이름이 일치하지 않게 됩니다.

ADVANCED_OPTIMIZATIONS용 코드를 준비하는 방법을 자세히 알아보려면 고급 컴파일 및 externs를 참고하세요.

ADVANCED_OPTIMIZATIONS 변환에는 다음이 포함됩니다.

  • 더 적극적인 이름 바꾸기:

    SIMPLE_OPTIMIZATIONS를 사용한 컴파일은 함수 내에서 매개변수와 변수의 이름만 바꿉니다. ADVANCED_OPTIMIZATIONS는 전역 변수, 함수 이름, 속성의 이름도 바꿉니다.

  • 사용하지 않는 코드 삭제:

    ADVANCED_OPTIMIZATIONS로 컴파일하면 도달할 수 없는 것으로 증명된 코드가 삭제됩니다. 이는 대규모 라이브러리와 함께 사용할 때 특히 유용합니다. 대규모 라이브러리 파일에서 몇 가지 함수만 사용하는 경우 컴파일러는 출력에서 해당 함수를 제외한 모든 항목을 삭제할 수 있습니다.

  • 전역 인라인:

    ADVANCED_OPTIMIZATIONS로 컴파일하면 일부 함수 호출이 함수의 본문으로 대체됩니다. 이 변환을 '인라이닝'이라고 합니다. 컴파일러는 인라이닝이 안전하고 공간을 절약한다고 판단하는 경우에만 함수를 인라인합니다. ADVANCED_OPTIMIZATIONS를 사용한 컴파일은 컴파일러가 안전하게 할 수 있다고 판단하는 경우 상수와 일부 변수를 인라인합니다.

컴파일 수준 설정 방법

Closure Compiler 애플리케이션에서 컴파일 수준을 설정하려면 다음 명령어와 같이 WHITESPACE_ONLY, SIMPLE 또는 ADVANCED 값이 있는 명령줄 플래그 --compilation_level를 포함하세요.

java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js