"tl; dr" включено
При попытке отключить ведение журнала, чтобы избежать спама после развертывания, я делал что-то вроде
if (isDebug)
console.log(...);
но я чувствовал, что (или читать онлайн) это замедлит код в целом, потому что условие будет оцениваться каждый раз (и я обычно включаю много из них, и функции часто вызываются, либо через циклы, setIntervals или w /e).
Таким образом, теперь я переключился на простое «очищение» функций с помощью специального регистратора, например
function LOGGER_MODULE_FACTORY() {
let current_log_level = "log";
return {
log: console.log,
info: console.info,
warn: console.warn,
error: console.error,
setDebug: function(logLevel) {
current_log_level = logLevel;
this.log = (logLevel === true || logLevel === "log") ? console.log : function () {};
this.info = (logLevel === true || logLevel === "log" || logLevel === "info") ? console.info : function () {};
this.warn = (logLevel === true || logLevel === "log" || logLevel === "info" || logLevel === "warn") ? console.warn : function () {};
this.error = (!logLevel) ? function () {} : console.error;
return logLevel;
},
getCurrent_log_level: function () { return current_log_level; }
}
}
Считая, что, вероятно, быстрее запустить пустую функцию, чем вычислять выражение, было легче писать.
Я попытался создать скрипку , чтобы проверить мою теорию и сравнить производительность, но значения часто довольно случайны ...
Редактировать : jsperf test
Интересные результаты. Результаты "Chrome 64" получены при запуске на Edge.
Мое рассуждение основывалось на том факте, что я мало что читаю о процессорах и, по-видимому, они делают что-то самостоятельно, чтобы оптимизировать общее время выполнения, например, пропуская бесполезные операции: скажем, у нас есть:
a = x
b = y
c = a + 3
Процессор фактически игнорировал бы вторую строку (или что-то ... Я далеко не эксперт, ага, я просто с любопытством прочитал этот факт).
Теперь, поскольку в нашем браузере мы можем в любой момент получить доступ к любой объявленной глобально переменной с помощью консоли, это не может произойти, и поэтому я решил просто спросить в Интернете:
ТЛ; др:
Повторно ли вызывать пустую функцию / функцию без тела (страницы, которые я создаю, в основном, работают 24/7 на панели инструментов) лучше, с точки зрения производительности, чем помещать условие перед исходной функцией (console.log / info / warn / error
)?
По сути, вы спрашиваете, что быстрее f = () => {}; f () или flag = false; if (флаг) f ()