Уровни компиляции замыкающего компилятора

Компилятор 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