webentwicklung-frage-antwort-db.com.de

Wird Console.log die Leistung bei der Ausführung von JavaScript reduzieren?

Wird die Verwendung der Debugging-Funktion console.log die JavaScript-Ausführungsleistung reduzieren? Beeinflusst dies die Geschwindigkeit der Skriptausführung in Produktionsumgebungen? 

Gibt es eine Möglichkeit, Konsolenprotokolle in Produktionsumgebungen von einem einzigen Konfigurationsstandort aus zu deaktivieren?

58
Sudantha

Wenn Sie dies auf einer öffentlichen Website oder etwas anderem haben, kann jeder, der sich mit den Entwicklertools wenig auskennt, Ihre Debug-Nachrichten lesen. Je nachdem, was Sie protokollieren, ist dies möglicherweise nicht wünschenswert.

Eine der besten Methoden besteht darin, den console.log in eine Ihrer Methoden zu packen und wo Sie nach Bedingungen suchen und sie ausführen können. In einem Produktions-Build können Sie diese Funktionen vermeiden. Diese Stack Overflow-Frage beschreibt ausführlich, wie Sie dies mit dem Closure-Compiler tun.

Also, um deine Fragen zu beantworten:

  1. Ja, es wird die Geschwindigkeit reduzieren, aber nur vernachlässigbar.
  2. Verwenden Sie es jedoch nicht, da es für eine Person zu einfach ist, Ihre Protokolle zu lesen.
  3. Die Antworten auf diese Frage können Ihnen Hinweise geben, wie Sie diese aus der Produktion entfernen können.
43
Ramesh

Tatsächlich ist console.log viel langsamer als eine leere Funktion. Wenn Sie diesen jsPerf-Test auf meinem Chrome 38 ausführen, erhalten Sie erstaunliche Ergebnisse:

  • wenn die Browserkonsole geschlossen ist, ist der Aufruf von console.logetwa 10.000 mal langsamer als der Aufruf einer leeren Funktion.
  • und Wenn die Konsole geöffnet ist, ist das Aufrufen um 100.000 Mal langsamer.

Sie werden die Leistungsverzögerung nicht bemerken, wenn Sie eine angemessene Anzahl von console.…-Anrufen haben, die einmal ausgelöst werden (einhundert dauert bei meiner Installation von Chrome 2 ms - oder 20 ms, wenn die Konsole geöffnet ist). Wenn Sie jedoch wiederholt Material an der Konsole protokollieren, beispielsweise durch Anschließen über requestAnimationFrame, kann dies die Dinge sprunghaft machen.

Aktualisieren:

In diesem Test habe ich auch die Idee eines benutzerdefinierten "versteckten Protokolls" für die Produktion geprüft - mit einer Variablen, die Protokollnachrichten enthält, die auf Anforderung verfügbar sind. Es stellt sich heraus, zu sein

  • etwa 1 000 mal schneller als der native console.log,
  • und natürlich 10 000 Mal schneller, wenn der Benutzer seine Konsole geöffnet hat.
54
tomekwi

Wenn Sie eine Verknüpfung zur Konsole in einem allgemeinen Kernskript erstellen, z. B .:

var con = console;

verwenden Sie dann in Ihrem Code con.log ("message") oder con.error ("error message"). In der Produktion können Sie con am Kernspeicherort einfach neu verkabeln:

var con = {
    log: function() {},
    error: function() {},
    debug: function() {}
}
8
sq2
const DEBUG = true / false
DEBUG && console.log('string')
6
Sergey Guns

Jeder Funktionsaufruf wird geringfügig die Leistung reduzieren. Ein paar console.log sollten jedoch keine nennenswerten Auswirkungen haben.

In älteren Browsern, die console nicht unterstützen, werden jedoch undefinierte Fehler ausgegeben.

6
Petah

Der Performance-Hit wird minimal sein. In älteren Browsern führt dies jedoch zu JavaScript-Fehlern, wenn die Browserkonsole des Benutzers log is not a function of undefined nicht geöffnet ist. Dies bedeutet, dass der gesamte JavaScript-Code nach dem Aufruf von console.log nicht ausgeführt wird.

Sie können einen Wrapper erstellen, um zu prüfen, ob window.console ein gültiges Objekt ist, und dann im Wrapper die Datei console.log aufzurufen. Etwas so einfaches würde funktionieren:

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

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

Hier ist eine Geige: http://jsfiddle.net/enDDV/

2
Paul

Ich habe diesen jsPerf-Test gemacht: http://jsperf.com/console-log1337

Es scheint nicht länger als andere Funktionsaufrufe zu dauern.

Was ist mit Browsern, die keine Konsolen-API haben? Wenn Sie zum Debuggen auf console.log zurückgreifen müssen, können Sie ein Skript in Ihre Produktionsbereitstellung aufnehmen, um die Konsolen-API zu überschreiben, wie es Paul in seiner Antwort vorschlägt.

1
Jørgen

Wird das Debugging-Feature "console.log" verwendet, wird JavaScript .__ reduziert. Ausführungsleistung? Beeinflusst dies die Geschwindigkeit der Skriptausführung in Produktionsumgebungen?

Natürlich reduziert console.log() die Leistung Ihres Programms, da dafür Rechenzeit erforderlich ist.

Gibt es einen Ansatz zum Deaktivieren von Konsolenprotokollen in der Produktion Umgebungen von einem einzigen Konfigurationsstandort aus?

Fügen Sie diesen Code am Anfang Ihres Skripts ein, um die Standardfunktion console.log durch eine leere Funktion zu überschreiben.

console.log = function () { };
0
holydragon