Javascript.RU

Автоудаление отладочных свойств и объектов

Как правило, в нашем коде есть отладочные вызовы.
Например:

console.info("created "+object)

Или даже такие:

my.ajax.debugSend(message)

Google Closure Compiler позволяет удалять такие вызовы из production-кода. Здесь вопрос даже не столько в размере кода и в быстродействии, как в удобстве. Как правило, никому не нужны вызовы console.debug на боевом сервере.

Для этого можно добавить флаги, устанавливающие несколько недокументированных внутренних опций.

--strip_types
Типы, которые будут удалены. Например, "--strip_types console" приведет к удалению всех вызовов вида "console.*": console.log, console.debug и т.п.
--strip_name_prefixes
Удаляет все вызовы, которые начинаются с указанной строки. Например, "--strip_name_prefixes debug" приведет к удалению вызовов вида "debug*" для любых объектов.
В частности, удалятся console.debug(..), my.debugMethod(..).
--strip_name_suffixes
Аналогично --strip_name_prefixes, но вызовы должны заканчиваться на строку.
--strip_type_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 с этими опциями вы можете увидеть в конце статьи Использование внутренних опций и собственные флаги.


Автор: VAL (не зарегистрирован), дата: 24 февраля, 2011 - 14:47
#permalink

Подскажите чем еще(какие инструменеты), кроме Google Closure Compiler, можно убрать отладочный код?
С Closure Compiler проблема, что он обновился и убраны флаги com.google.common.flags.Flag. Та и не все js разработчики знают java.


 
Текущий раздел
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние темы на форуме
Forum