Уровни компиляции Closure Compiler

Компилятор Closure позволяет выбрать один из трех уровней компиляции: от простого удаления пробелов и комментариев до агрессивных преобразований кода.

ТОЛЬКО БЕЛОЕ_ПРОСТРАНСТВО

Уровень компиляции WHITESPACE_ONLY удаляет из кода комментарии, а также переносы строк, ненужные пробелы, лишние знаки препинания (например, скобки и точки с запятой) и другие пробелы. Выходной JavaScript-код функционально идентичен исходному JavaScript.

Транспиляция языковых функций всё равно будет выполнена, даже если запрошенный режим выходного языка отличается от режима входного языка. См. --language_in и --language_out в разделе Флаги и параметры .

Этот уровень компиляции обеспечивает наименьшее сжатие из трех уровней.

ПРОСТЫЕ_ОПТИМИЗАЦИИ

Уровень компиляции 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 Compiler, включите флаг командной строки --compilation_level со значением WHITESPACE_ONLY , SIMPLE или ADVANCED , как в следующей команде:

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