Компилятор Closure позволяет выбрать один из трех уровней компиляции, начиная от простого удаления пробелов и комментариев и заканчивая агрессивными преобразованиями кода.
WHITESPACE_ONLY
Уровень компиляции WHITESPACE_ONLY
удаляет комментарии из вашего кода, а также разрывы строк, ненужные пробелы, посторонние знаки препинания (такие как круглые скобки и точки с запятой) и другие пробелы. Выходной JavaScript функционально идентичен исходному JavaScript.
Транспиляция языковых функций по-прежнему будет происходить, если запрошенный режим выходного языка отличается от режима входного языка. См. --language_in
и --language_out
в разделе Флаги и параметры .
Этот уровень компиляции обеспечивает наименьшее сжатие из трех уровней.
SIMPLE_OPTIMIZATIONS
Уровень компиляции SIMPLE_OPTIMIZATIONS
выполняет то же удаление пробелов и комментариев, что и WHITESPACE_ONLY
, но также выполняет оптимизацию внутри выражений и функций, включая переименование локальных переменных и параметров функций в более короткие имена. Переименование переменных в более короткие имена делает код значительно меньше. Поскольку уровень SIMPLE_OPTIMIZATIONS
переименовывает только символы, которые являются локальными для функций, он не мешает взаимодействию между скомпилированным JavaScript и другим JavaScript.
Компиляция с SIMPLE_OPTIMIZATIONS
всегда сохраняет функциональность синтаксически допустимого JavaScript, при условии, что код не обращается к локальным переменным с использованием строковых имен (например, с помощью операторов eval()
или путем вызова toString в функциях).
SIMPLE_OPTIMIZATIONS
— это уровень компиляции по умолчанию.
РАСШИРЕННЫЕ_ОПТИМИЗАЦИИ
Уровень компиляции ADVANCED_OPTIMIZATIONS
выполняет те же преобразования, что и SIMPLE_OPTIMIZATIONS
, но добавляет множество более агрессивных глобальных преобразований для достижения максимального сжатия всех трех уровней. Уровень ADVANCED_OPTIMIZATIONS
сжимает JavaScript намного больше, чем это возможно с другими инструментами.
Чтобы включить это экстремальное сжатие, ADVANCED_OPTIMIZATIONS
делает серьезные предположения о скомпилированном коде. Если ваш код не соответствует этим предположениям, ADVANCED_OPTIMIZATIONS
создаст код, который не запустится.
Например, код, скомпилированный с ADVANCED_OPTIMIZATIONS
, может не работать с нескомпилированным кодом, если вы не предпримете специальных шагов для обеспечения совместимости. Если вы не отметите внешние функции и свойства, на которые есть ссылки в вашем коде, Closure Compiler будет ненадлежащим образом переименовывать ссылки в вашем коде, вызывая несоответствие между именами в вашем коде и во внешнем коде.
Чтобы узнать больше о том, как подготовить свой код для ADVANCED_OPTIMIZATIONS
, прочитайте Advanced Compilation and Externs .
Преобразования ADVANCED_OPTIMIZATIONS
включают:
- более агрессивное переименование:
Компиляция с
SIMPLE_OPTIMIZATIONS
только переименовывает параметры и переменные внутри функций.ADVANCED_OPTIMIZATIONS
также переименовывает глобальные переменные, имена функций и свойства. - Удаление мертвого кода:
Компиляция с
ADVANCED_OPTIMIZATIONS
удаляет код, который недостижим доказуемо. Это особенно полезно в сочетании с большими библиотеками. Если вы используете только несколько функций из большого библиотечного файла, компилятор может удалить из своего вывода все, кроме этих функций. - глобальное встраивание:
Компиляция с
ADVANCED_OPTIMIZATIONS
заменяет некоторые вызовы функций телом функции. Это преобразование известно как «встраивание». Компилятор встраивает функции только тогда, когда определяет, что встраивание безопасно и экономит место. Компиляция сADVANCED_OPTIMIZATIONS
также встраивает константы и некоторые переменные, когда компилятор определяет, что это можно сделать безопасно.
Как установить уровень компиляции
Пользовательский интерфейс службы компилятора Closure, API службы и приложение имеют разные методы для установки уровня compilation_level
.
В пользовательском интерфейсе службы Closure Compiler
Чтобы установить уровень компиляции в пользовательском интерфейсе службы Closure Compiler, щелкните переключатели в разделе интерфейса « Оптимизация ».
В API сервиса Closure Compiler
Чтобы установить уровень компиляции в API сервиса Closure Compiler, включите параметр запроса с compilation_level
со значением WHITESPACE_ONLY
, SIMPLE_OPTIMIZATIONS
или ADVANCED_OPTIMIZATIONS
, как в следующей программе Python:
#!/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()
В приложении Closure Compiler
Чтобы установить уровень компиляции в приложении Closure Compiler, включите флаг командной строки --compilation_level
со значением WHITESPACE_ONLY
, SIMPLE
или ADVANCED
, как в следующей команде:
java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js