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 - 15:47
#permalink

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


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
2 + 0 =
Введите результат. Например, для 1+3, введите 4.
 
Текущий раздел
Поиск по сайту
Реклама
Содержание

Учебник javascript

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

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

Интерфейсы

Все об AJAX

Оптимизация

Разное

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

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