Часто задаваемые вопросы


Что такое замыкающий компилятор? Почему я должен использовать его?
Компилятор Closure — это инструмент для ускорения загрузки и запуска JavaScript. Вы можете использовать Closure Compiler, чтобы уменьшить размер ваших файлов JavaScript и сделать их более эффективными.
Чем Closure Compiler отличается от других существующих компрессоров JavaScript?

Как правило, Closure Compiler должен соответствовать или превосходить сжатие других инструментов минимизации кода и сокращать время загрузки для вашего веб-приложения. Кроме того, Closure Compiler может помочь вам найти синтаксические ошибки во время разработки (а не во время тестирования) и определить потенциально ошибочные шаблоны кода.

В простом режиме Closure Compiler должен быть в состоянии работать лучше, чем другие инструменты, поскольку он использует анализ, подобный компилятору, для поиска дополнительных способов минимизировать размер кода. Например, Closure Compiler может встраивать функции, которые используются только в нескольких экземплярах, повторно использовать имена переменных и предварительно вычислять константные выражения.

В расширенном режиме Closure Compiler также может использовать добавленные вами аннотации типов для поиска трудно обнаруживаемых ошибок.

Может ли Closure Compiler компилировать JavaScript, встроенный в HTML?
Нет. Компилятор Closure работает только с файлами, содержащими только JavaScript.
Могу ли я использовать Closure Compiler вместе с другими минификаторами JavaScript?

Да. Компилятор Closure читает любой допустимый код JavaScript и генерирует корректный код JavaScript, поэтому вы можете применить компилятор Closure к файлу JavaScript либо до, либо после запуска файла через другой минификатор.

Помните, что Closure Compiler и другие минификаторы могут иметь определенные ожидания относительно входящего кода. Например, минификатор, удаляющий комментарии, может удалить лицензии или аннотацию, необходимую другому инструменту.

Как я могу отлаживать JavaScript, создаваемый Closure Compiler?
Если ваш скомпилированный код выдает ошибки или демонстрирует непредвиденное поведение, вы можете использовать исходные карты для устранения проблемы. Карта исходного кода обеспечивает сопоставление между скомпилированным кодом и исходным исходным кодом, чтобы инструменты разработчика браузера могли отображать исходный код вместо скомпилированного. Чтобы компилятор Closure создал исходную карту, передайте флаг --create_source_map в командной строке. Например:
$ java -jar compiler.jar --js example.js --create_source_map ./example-map --js_output_file example-compiled.js
Затем, если вы используете браузер, поддерживающий исходные карты (например, Chrome или Firefox), вы можете установить точки останова так же, как для нескомпилированного кода, и инструменты разработчика браузера отобразят соответствующую строку код в первоисточнике. Дополнительную информацию об инструментах разработчика Chrome, в том числе об исходных картах, см. в разделе Отладка JavaScript .
Делает ли компилятор какой-либо компромисс между скоростью выполнения моего приложения и размером загружаемого кода?
Да. Любой оптимизирующий компилятор идет на компромиссы. Некоторые оптимизации размера приводят к небольшому увеличению скорости. Однако разработчики Closure Compiler постарались не вводить значительное дополнительное время выполнения. Некоторые оптимизации компилятора даже сокращают время выполнения (см. следующий вопрос).
Оптимизирует ли компилятор скорость?
В большинстве случаев меньший код — это более быстрый код, поскольку время загрузки обычно является наиболее важным фактором скорости в веб-приложениях. Оптимизации, уменьшающие избыточность, также ускоряют время выполнения кода.
Есть ли какие-либо ограничения на размер файлов, которые можно компилировать?
Веб-служба компиляции имеет максимальный размер файла, а автономное приложение-компилятор — нет.
Доступен ли Closure Compiler для всех платформ?
Компилятор написан на Java, поэтому он может работать везде, где работает Java.
Может ли компилятор обрабатывать любой легальный JavaScript?
В основном. Некоторые конструкции JavaScript, в том числе eval() и with() , могут сделать недействительными предположения, на которых основаны преобразования компилятора.
Что мне нужно знать о веб-разработке, чтобы использовать Closure Compiler?
Компилятор Closure — это инструмент для разработки JavaScript, поэтому вам нужно знать, как программировать на JavaScript, чтобы использовать компилятор. Но любой, кто использует JavaScript, может извлечь выгоду из использования Closure Compiler.
Как компилятор Closure работает с библиотекой Closure?
Компилятор Closure обеспечивает специальные проверки и оптимизации для кода, использующего библиотеку Closure. Кроме того, служба Closure Compiler может автоматически включать файлы библиотеки Closure. Книга Finding Your Way around Closure описывает синтаксис для объявления частей Closure, которые вам нужны. См. справочник по API для получения информации об использовании Closure Library с API. Чтобы использовать библиотеку Closure с приложением Closure Compiler, вы должны сначала загрузить библиотеку Closure . Поддержка Closure Library включена в приложении-компиляторе по умолчанию.
Мой код перестает работать или компилятор выдает ошибки, когда я компилирую с ADVANCED_OPTIMIZATIONS . Почему?
Использование расширенного режима обычно требует некоторой подготовки и внесения изменений в код. Advanced Compilation and Externs объясняет, как убедиться, что ваш код работает с ADVANCED_OPTIMIZATIONS .
Почему в скомпилированных скриптах есть случайные переводы строк?
Компилятор Closure намеренно добавляет разрывы строк каждые 500 символов или около того. Брандмауэры и прокси-серверы иногда повреждают или игнорируют большие файлы JavaScript с очень длинными строками. Добавление разрывов строк через каждые 500 символов предотвращает эту проблему. Удаление разрывов строк не влияет на семантику скрипта. Влияние на размер кода невелико, и компилятор оптимизирует размещение разрывов строк, так что штраф за размер кода еще меньше, когда файлы сжаты gzip.
У меня есть уведомления об авторских правах или текст лицензии с открытым исходным кодом, которые должны отображаться в моем исходном коде. Как сделать, чтобы Closure Compiler не удалял этот текст?
Компилятор Closure поддерживает тег JSDoc @license . Добавьте тег @license к любому комментарию JSDoc, чтобы сохранить комментарий в выводе компилятора. Дополнительные сведения см. в разделе Аннотирование JavaScript для компилятора закрытия .