Будет ли console.log уменьшать производительность выполнения JavaScript?
Будет ли использовать функцию отладки console.log
снизить производительность выполнения JavaScript? Будет ли это влиять на скорость выполнения script в производственных средах?
Есть ли способ отключить консольные журналы в производственных средах из одного места конфигурации?
Ответы
Ответ 1
Если вы собираетесь разместить это на общедоступном сайте или что-то в этом роде, любой, кто мало знает об использовании инструментов разработчика, может прочитать ваши сообщения отладки. В зависимости от того, что вы регистрируете, это может быть нежелательным поведением.
Один из лучших подходов - обернуть файл console.log
одним из ваших методов, где вы можете проверить условия и выполнить их. В производственной сборке вы можете избежать использования этих функций. Этот вопрос подробно рассказывает о том, как сделать то же самое с помощью компилятора Closure.
Итак, чтобы ответить на ваши вопросы:
- Да, это снизит скорость,
хотя и незначительно. - Но не используйте его, поскольку человеку слишком легко читать ваши журналы.
- Ответы на этот вопрос могут дать вам подсказки о том, как снять их с производства.
Ответ 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