124

デバッグ機能を使用するとconsole.logJavaScript の実行パフォーマンスが低下しますか? 本番環境でのスクリプトの実行速度に影響はありますか?

単一の構成場所から実稼働環境でコンソール ログを無効にする方法はありますか?

4

9 に答える 9

72

これを公開サイトなどに置く場合、開発者ツールの使用に関する知識がほとんどない人なら誰でもデバッグ メッセージを読むことができます。ログに記録する内容によっては、これは望ましい動作ではない場合があります。

最良のアプローチの 1 つは、メソッドの 1 つにラップし、console.log条件を確認して実行できる場所にすることです。本番ビルドでは、これらの機能を避けることができます。このStack Overflow questionでは、 Closure コンパイラを使用して同じことを行う方法について詳しく説明しています。

だから、あなたの質問に答えるために:

  1. はい、ごくわずかですが、速度が低下します。
  2. ただし、誰かがログを読み取るのは簡単すぎるため、使用しないでください。
  3. この質問への回答は、それらを本番環境から削除する方法に関するヒントを提供する場合があります。
于 2012-07-11T05:50:18.013 に答える
21
const DEBUG = true / false
DEBUG && console.log('string')
于 2016-11-25T10:08:53.973 に答える
12

一般的なコア スクリプトでコンソールへのショートカットを作成すると、次のようになります。

var con = console;

次に、コード全体で con.log("message") または con.error("error message") を使用します。本番環境では、コアの場所で con を次のように再配線できます。

var con = {
    log: function() {},
    error: function() {},
    debug: function() {}
}
于 2012-07-11T05:49:00.737 に答える
7

関数を呼び出すと、パフォーマンスがわずかに低下します。しかし、いくつかconsole.logの は、顕著な効果をもたらすべきではありません。

ただし、サポートしていない古いブラウザでは未定義のエラーがスローされますconsole

于 2012-07-11T05:45:20.037 に答える
3

パフォーマンスへの影響は最小限に抑えられますが、古いブラウザでは、ユーザーのブラウザ コンソールが開いていない場合に JavaScript エラーが発生しますlog is not a function of undefined。これは、console.log 呼び出しの後のすべての JavaScript コードが実行されないことを意味します。

が有効なオブジェクトかどうかを確認するラッパーを作成し、ラッパーでwindow.consoleconsole.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/

于 2012-07-11T05:44:39.833 に答える
2

この jsPerf テストを作成しました: http://jsperf.com/console-log1337

他の関数呼び出しよりも時間がかからないようです。

コンソール API を持たないブラウザはどうですか? デバッグに console.log を使用する必要がある場合は、Paul が回答で提案しているように、コンソール API をオーバーライドするスクリプトを本番環境のデプロイに含めることができます。

于 2012-07-11T05:46:35.097 に答える