Подтвердить что ты не робот

Будет ли console.log уменьшать производительность выполнения JavaScript?

Будет ли использовать функцию отладки console.log снизить производительность выполнения JavaScript? Будет ли это влиять на скорость выполнения script в производственных средах?

Есть ли способ отключить консольные журналы в производственных средах из одного места конфигурации?

4b9b3361

Ответ 1

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

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

Итак, чтобы ответить на ваши вопросы:

  1. Да, это снизит скорость, хотя и незначительно.
  2. Но не используйте его, поскольку человеку слишком легко читать ваши журналы.
  3. Ответы на этот вопрос могут дать вам подсказки о том, как снять их с производства.

Ответ 2

На самом деле console.log намного медленнее пустой функции. Выполнение этого теста jsPerf на моем Chrome 38 дает потрясающие результаты:

  • когда консоль браузера закрыта, вызов console.log примерно в 10 000 раз медленнее, чем вызов пустой функции,
  • и , когда консоль открыта, вызывая ее на 100 000 раз медленнее.

Не то, чтобы вы заметили отставание в производительности, если у вас есть разумное количество вызовов console.…, которые запускаются один раз (сто займет 2 мс при установке Chrome - или 20 мс, когда консоль открыта). Но если вы много раз записываете материал на консоль - например, подключая его через requestAnimationFrame, это может сделать вещи неудобными.

Обновление:

В этом тесте я также рассмотрел идею пользовательского "скрытого журнала" для производства - с переменной, которая содержит сообщения журнала, предоставляется по запросу. Оказывается,

  • примерно в 1000 раз быстрее, чем нативный console.log,
  • и, очевидно, в 10 000 раз быстрее, если у пользователя открыта консоль.

Ответ 3

Если вы создаете ярлык для консоли в общем ядре script, например:

var con = console;

а затем используйте con.log( "сообщение" ) или con.error( "сообщение об ошибке" ) по всему вашему коду, при производстве вы можете просто перевести con в основном местоположении на:

var con = {
    log: function() {},
    error: function() {},
    debug: function() {}
}

Ответ 4

const DEBUG = true / false
DEBUG && console.log('string')

Ответ 5

Любой вызов функции немного снизит производительность. Но несколько console.log не должны иметь заметного эффекта.

Однако он бросит ошибки undefined в старых браузерах, которые не поддерживают console

Ответ 6

Достижение производительности будет минимальным, однако в старых браузерах это приведет к ошибкам JavaScript, если консоль браузеров пользователей не будет открыта log is not a function of undefined. Это означает, что весь код JavaScript после вызова console.log не будет выполняться.

Вы можете создать обертку, чтобы проверить, является ли window.console допустимым объектом, а затем вызовите console.log в оболочке. Произойдет что-то простое:

window.log = (function(console) {
    var canLog = !!console;
    return function(txt) {
        if(canLog) console.log('log: ' + txt);
    };
})(window.console);

log('my message'); //log: my message

Вот скрипка: http://jsfiddle.net/enDDV/

Ответ 7

Я сделал этот тест jsPerf: http://jsperf.com/console-log1337

Похоже, что это не больше, чем другие вызовы функций.

Как насчет браузеров, у которых нет консольного API? Если вам нужно использовать console.log для отладки, вы можете включить script в ваше производственное развертывание, чтобы переопределить API-интерфейс консоли, как говорит Павел в своем ответе.

Ответ 8

Будет ли использование функции отладки console.log снижать производительность выполнения JavaScript? Повлияет ли это на скорость выполнения скриптов в производственных средах?

Конечно, console.log() снизит производительность вашей программы, так как это занимает время вычислений.

Существует ли подход для отключения журналов консоли в производственных средах из единого расположения конфигурации?

Поместите этот код в начало вашего скрипта, чтобы переопределить стандартную функцию console.log на пустую функцию.

console.log = function () { };

Ответ 9

Как показали другие, console.log() снизит производительность.

console.debug() - это то, что вы ищете, поскольку оно будет отображаться только в том случае, если пользователь включил подробное ведение журнала в консоли браузера.

https://developer.mozilla.org/en-US/docs/Web/API/Console/debug