2010-07-28 2 views
1

Где я работаю, весь наш JavaScript запускается через компилятор до его развертывания для выпуска продукции. Одна из вещей, этот компилятор JavaScript делает (кроме делать такие вещи, как Минимизировать), это искать строки кода, которые появляются, как это, и лишить их из версий выпуска нашего JavaScript:JavaScript: Возможно использование директивы #debug?

//#debug 
alert("this line of code will not make it into the release build") 
//#/debug 

Я не много оглядывайся, но я еще не видел эту директиву // # debug, используемую в любом из наших JavaScript.

Что такое полезность? Я не понимаю, почему это может быть хорошей идеей и думаю, что директивы #debug (будь то на языке C# или JavaScript) обычно являются признаком плохого программирования.

Было ли это пустой тратой времени на добавление функций для # # debug или что?

ответ

1

Если вы использовали большую библиотеку JavaScript, такую ​​как YUI, в которой есть регистратор, она может регистрировать отладочные сообщения только в режиме отладки для производительности.

0

Поскольку это проприетарное решение, мы можем только догадываться о причинах. Многие браузеры обеспечивают console объект для входа различных типов сообщений, таких как debug, error и т.д.

Вы можете написать пользовательский объект console всегда отключен в режиме производства. Тем не менее, операторы журнала все равно будут присутствовать, но только в отключенном состоянии.

Имея источник, отправляемый с помощью такого компилятора, такого как ваш, эти операторы могут быть удалены, что уменьшит размер байта конечного вывода.

0

Думай об этом как эквивалент что-то вроде этого:

// in a header somewhere... 

// debug is off by default unless turned on at compile time 
#ifndef DEBUG 
#define DEBUG 0 
#endif 

// in your code... 

var response = getSomeData({foo:1, bar:2}); 

#if DEBUG 
console.log(response); 
#endif 

doStuffWith(response); 

Такого рода вещи вполне приемлемо в скомпилированных языках, так почему бы не в (препроцессором) JavaScript?

0

Я думаю, что это было полезно (возможно, очень полезно) назад несколько лет и, вероятно, было самым простым способом для большинства разработчиков узнать, что происходит в их JavaScript. Это объясняется тем, что IDE и другие инструменты либо не были достаточно зрелыми, либо широко распространены в их использовании.

Я работаю в основном в стеке Microsoft (так что я не так хорошо знаком с другими средами), но с такими инструментами, как VS2008/VS2010, Fiddler и IE8 (ugh! - years behind FF) dev инструменты и инструменты FF, такие как firebug/hammerhead/yslow/и т. д., переполненные оповещения в вашем JavaScript больше не нужны для отладки. (Вероятно, есть несколько примеров, где это полезно - но не так много сейчас.) Возможность выполнять JavaScript, проверять запросы/ответы и изменять «на лету» действительно делает отладочные предупреждения почти устаревшими.

Итак, // # debug был полезен - возможно, не так много сейчас.

+0

Вы сказали бы, что это полезно, если оно записывалось с помощью 'console.log' вместо' alert'? – Anurag

0

Я использовал следующие самодельного Stuf:

// Uncomment to enable debug messages 
// var debug = true; 

function ShowDebugMessage(message) { 
    if (debug) { 
     alert(message); 
    } 
} 

Так что, когда вы объявили переменную debug, который установлен в true - все ShowDebugMessage() вызовы будут называть alert(), а также. Поэтому просто используйте его в коде и забывайте о таких условиях, как ifdef или ручное комментирование строк вывода отладки.

0

Для пользовательских проектов без какой-либо определенной переопределенной консоли.

Я бы рекомендовал использовать: https://github.com/sunnykgupta/jsLogger, он автор.

Особенности:

  • Это безопасно отменяет console.log. Обращает на себя внимание, если консоль недоступна (о да, это тоже необходимо учитывать.)
  • Сохраняет все журналы (даже если они подавлены) для последующего поиска.
  • Управляет основными функциями консоли, такими как журнал, предупреждение, ошибка, информация.
  • Открыт для модификаций и будет обновляться при появлении новых предложений.