Как правило, в нашем коде есть отладочные вызовы.
Например:
console.info("created "+object)
Или даже такие:
my.ajax.debugSend(message)
Google Closure Compiler позволяет удалять такие вызовы из production-кода. Здесь вопрос даже не столько в размере кода и в быстродействии, как в удобстве. Как правило, никому не нужны вызовы console.debug на боевом сервере.
Для этого можно добавить флаги, устанавливающие несколько недокументированных внутренних опций.
console.log, console.debug и т.п.console.debug(..), my.debugMethod(..).--strip_name_prefixes, но вызовы должны заканчиваться на строку.--strip_types, но проверяет не точное совпадение названия типа, а его начало.Например:
/** @constructor */
function Animal(name, speed) {
my.ajax.debugSend(name)
console.info("created animal "+name)
this.name = name
this.speed = speed
}
После запуска с флагами:
--strip_types console --strip_name_prefixes debug
Останется:
function Animal(a, b) {
this.name = a;
this.speed = b
}
Чтобы подключить эту опцию, необходимо добавить соответствующие флаги компилятору:
@FlagSpec(help = "Specify stripTypes. You can include multiple.")
private static final Flag<List<String>> FLAG_strip_types
= Flag.stringCollector();
@FlagSpec(help = "Specify stripTypePrefixes. You can include multiple.")
public static final Flag<List<String>> FLAG_strip_type_prefixes = Flag.stringCollector();
@FlagSpec(help = "Specify stripTypeSuffixes. You can include multiple.")
private static final Flag<List<String>> FLAG_strip_name_suffixes
= Flag.stringCollector();
@FlagSpec(help = "Specify stripNamePrefixes. You can include multiple.")
private static final Flag<List<String>> FLAG_strip_name_prefixes
= Flag.stringCollector();
Здесь использован тип флагов stringCollector. Он допускает многократное указание одного и того же флага и собирает значения в список:
--strip_types console --strip_types debug ....
В опции компилятора добавим значения из флагов.
options.stripTypes = new HashSet<String>(FLAG_strip_types.get()); options.stripTypePrefixes = new HashSet<String>(FLAG_strip_type_prefixes.get()); options.stripNameSuffixes = new HashSet<String>(FLAG_strip_name_suffixes.get()); options.stripNamePrefixes = new HashSet<String>(FLAG_strip_name_prefixes.get());
Эти опции запускают встроенный проход компилятора, который удаляет символы, подпадающие под strip-флаги.
Готовый файл MyCompilerRunner.java с этими опциями вы можете увидеть в конце статьи Использование внутренних опций и собственные флаги.