클로저 컴파일러 컴파일 수준

클로저 컴파일러를 사용하면 공백 및 주석 삭제에서 적극적인 코드 변환까지 세 가지 수준의 컴파일 중에서 선택할 수 있습니다.

공백만

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

요청된 출력 언어 모드가 입력 언어 모드와 다른 경우 언어 기능의 변환이 계속 발생합니다. 플래그 및 옵션에서 --language_in--language_out를 참고하세요.

이 컴파일 수준은 3가지 수준 중 가장 작은 압축을 제공합니다.

단순 최적화

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

SIMPLE_OPTIMIZATIONS로 컴파일할 때에는 항상 코드가 유효한 자바스크립트의 기능을 유지합니다. 단, 코드가 문자열 이름을 사용하여 로컬 변수에 액세스하지 않아야 합니다 (예: eval() 문을 사용하거나 함수에 toString을 호출).

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

고급_최적화

ADVANCED_OPTIMIZATIONS 컴파일 수준은 SIMPLE_OPTIMIZATIONS와 동일한 변환을 실행하지만, 3가지 수준 모두 중 가장 높은 압축을 달성하기 위해 보다 공격적인 전역 변환을 추가합니다. ADVANCED_OPTIMIZATIONS 수준은 다른 도구에서 사용할 수 있는 것 이상으로 자바스크립트를 압축합니다.

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

예를 들어 ADVANCED_OPTIMIZATIONS를 사용하여 컴파일된 코드는 상호 운용성을 보장하기 위한 특별한 조치를 취하지 않는 한 컴파일되지 않은 코드와 호환되지 않을 수 있습니다. 코드에서 참조된 외부 함수 및 속성을 신고하지 않으면 클로저 컴파일러가 코드의 참조 이름을 부적절한 방식으로 바꿔 코드의 이름과 외부 코드의 이름이 일치하지 않게 됩니다.

ADVANCED_OPTIMIZATIONS용 코드를 준비하는 방법을 자세히 알아보려면 고급 컴파일 및 익스텐션을 읽어보세요.

ADVANCED_OPTIMIZATIONS 변환은 다음과 같습니다.

  • 보다 적극적인 이름 변경:

    SIMPLE_OPTIMIZATIONS로 컴파일하면 함수 내의 매개변수 및 변수만 이름이 변경됩니다. ADVANCED_OPTIMIZATIONS는 전역 변수, 함수 이름, 속성의 이름도 변경합니다.

  • 불량 코드 삭제:

    ADVANCED_OPTIMIZATIONS로 컴파일하면 연결할 수 없는 코드가 삭제됩니다. 이는 대규모 라이브러리와 함께 사용할 때 특히 유용합니다. 대용량 라이브러리 파일에서 몇 개의 함수만 사용한다면 컴파일러는 출력에서 이러한 함수를 제외한 모든 함수를 삭제할 수 있습니다.

  • 글로벌 인라인 처리:

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

컴파일 수준 설정 방법

클로저 컴파일러 서비스 UI, 서비스 API, 애플리케이션에는 모두 compilation_level 설정을 위한 메서드가 서로 다릅니다.

클로저 컴파일러 서비스 UI

클로저 컴파일러 서비스 UI에서 컴파일 수준을 설정하려면 인터페이스의 최적화 섹션에서 라디오 버튼을 클릭합니다.

UI 스크린샷

Closure Compiler 서비스 API

Closure Compiler 서비스 API에서 컴파일 수준을 설정하려면 다음 Python 프로그램에서와 같이 compilation_level라는 요청 매개변수와 WHITESPACE_ONLY, SIMPLE_OPTIMIZATIONS 또는 ADVANCED_OPTIMIZATIONS를 포함합니다.

#!/usr/bin/python2.4

import httplib, urllib, sys

params = urllib.urlencode([
    ('code_url', sys.argv[1]),
    ('compilation_level', 'ADVANCED_OPTIMIZATIONS'),
    ('output_format', 'text'),
    ('output_info', 'compiled_code'),
  ])

headers = { "Content-type": "application/x-www-form-urlencoded" }
conn = httplib.HTTPSConnection('closure-compiler.appspot.com')
conn.request('POST', '/compile', params, headers)
response = conn.getresponse()
data = response.read()
print data
conn.close()

클로저 컴파일러 애플리케이션

클로저 컴파일러 애플리케이션에서 컴파일 수준을 설정하려면 다음 명령어와 같이 명령줄 플래그 --compilation_levelWHITESPACE_ONLY, SIMPLE 또는 ADVANCED 값과 함께 포함합니다.

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