Я пишу довольно большое программное обеспечение JavaScript. Я должен проследить вызовы, события журнала, действия отладки, в то время как поддерживают производительность и мобильность через браузеры.
WebKit и Firebug обе консоли предложения возражают с методами как трассировка (), журнал (), ошибка (), предупреждая (), и т.д. Они являются великими, но что я делаю, когда браузером является IE или Opera?
Предположите иметь большое приложение, Вы, конечно, хотите видеть все инициализации, которые оно делает, события, которые оно делает, и т.д., таким образом я заставляю его зарегистрировать их. Однако, если я просто зарегистрирую их, то вход не будет работать в браузерах, которым не зарегистрировали консоль в DOM. Я мог создать интерфейсный объект:
MyNamespace.Console = {};
MyNamespace.Console.log = function(value) {
if (console!==undefined) {
console.log(value);
}
else {
// What should I do to log events on other browsers?
}
}
Вышеупомянутое не заставляет так проблем произойти на IE / Opera, но как делают я регистрируюсь с IE (каждому действительно нужен вход с IE!).
Кроме того, если я сажаю журналы везде в моем приложении, оно замедляет меня, когда оно выполняется на продуктивной среде? У меня должны быть ОТЛАДКА переключателя вкл\выкл и простая проверка прежде, чем зарегистрировать это если ОТЛАДКА === верный, затем зарегистрироваться?
Что относительно систем как Компилятор Закрытия можно ли сделать их для удаления входа?
Чего, если существует ошибка при работе продуктивной среды и входа, не произошло, как Вы отлаживаете/находите проблему? И на самом деле, Вы когда-либо отправляете журналы ошибки JavaScript Вам (разработчик), чтобы удостовериться, что у Ваших клиентов нет проблем? Как это удается?
Я ценю любую отладку/вход обратной связи/комментариев с JavaScript, это - мой первый раз, пишущий огромное приложение JavaScript, и откровенно говоря, я не уверен, что должно я делать об этом... отлаживая и входя в систему, JavaScript кажется немного незаконченным.
Я бы не рекомендовал возвращать данные журнала отчетов приложения обратно разработчику - по крайней мере, без предварительного раскрытия этого пользователям / клиентам.
Было бы безопаснее сначала регистрировать ошибки / события / данные отладки в массиве, как предлагает Anurag, а затем периодически отправлять данные журнала на веб-сервер, где они могут храниться локально и циклически повторяться. Затем , если у клиента возникают проблемы , они могут сами загрузить журналы для отладки и либо отправить их вам вручную, либо явно указать приложению передать журналы вам, разработчику.
В любом случае запись в консоль обычно используется во время разработки. И для этого следует использовать флаг отладки, чтобы он не был включен постоянно.
Вы можете просто добавить все сообщения журнала в массив или объект. Объект может выглядеть так:
var logMessages = {
'log': [],
'debug': [],
'error': [],
...
};
где массив представляет сообщения, зарегистрированные для данного уровня, упорядоченные в хронологическом порядке или с использованием других критериев.
Вы можете просто определить идентичные интерфейсы для браузеров, в которых нет консоли
, по сравнению с теми, в которых она есть. Например,
if(!window.console) {
var console = {};
console.log = function(msg) {
..
};
console.debug = function(msg) {
..
};
..
}
Список сообщений может синхронизироваться с сервером, что, как я предполагаю, может быть необходимо только для ошибок и, возможно, предупреждений. Чтобы перехватывать все ошибки на странице, настройте обратный вызов на window
:
window.onerror = function() {
..
};
и внутри обратного вызова сообщите об этом серверу. Это может не очень хорошо работать с Opera. См. javascript-global-error-handling
Выполните поиск в Google по запросу accord redbird console.
Redbird позволяет удаленное ведение журнала непосредственно из любого совместимого со стандартами браузера с использованием чистого JavaScript. Он не влияет на вашу веб-службу и должен работать в Safari, Firefox, Chrome, Opera, MSIE, смартфонах и т. Д.
Redbird удобен для отладки кода, который отлично работает в одном браузере, но делает что-то другое в другом. Общий способ регистрации и агрегирования сообщений в разных браузерах помогает выявить различия.
Использование флага DEBUG, как вы предложили, является хорошей идеей. Большое количество отладочных сообщений может замедлить работу в производственной среде. Другой вариант для производственной среды - заменить функцию ведения журнала нулевой функцией, то есть функцией, которая ничего не делает. Это позволяет избежать большого количества операторов if DEBUG в коде.