デバッグ機能を使用するとconsole.log
JavaScript の実行パフォーマンスが低下しますか? 本番環境でのスクリプトの実行速度に影響はありますか?
単一の構成場所から実稼働環境でコンソール ログを無効にする方法はありますか?
デバッグ機能を使用するとconsole.log
JavaScript の実行パフォーマンスが低下しますか? 本番環境でのスクリプトの実行速度に影響はありますか?
単一の構成場所から実稼働環境でコンソール ログを無効にする方法はありますか?
これを公開サイトなどに置く場合、開発者ツールの使用に関する知識がほとんどない人なら誰でもデバッグ メッセージを読むことができます。ログに記録する内容によっては、これは望ましい動作ではない場合があります。
最良のアプローチの 1 つは、メソッドの 1 つにラップし、console.log
条件を確認して実行できる場所にすることです。本番ビルドでは、これらの機能を避けることができます。このStack Overflow questionでは、 Closure コンパイラを使用して同じことを行う方法について詳しく説明しています。
だから、あなたの質問に答えるために:
const DEBUG = true / false
DEBUG && console.log('string')
一般的なコア スクリプトでコンソールへのショートカットを作成すると、次のようになります。
var con = console;
次に、コード全体で con.log("message") または con.error("error message") を使用します。本番環境では、コアの場所で con を次のように再配線できます。
var con = {
log: function() {},
error: function() {},
debug: function() {}
}
関数を呼び出すと、パフォーマンスがわずかに低下します。しかし、いくつかconsole.log
の は、顕著な効果をもたらすべきではありません。
ただし、サポートしていない古いブラウザでは未定義のエラーがスローされますconsole
パフォーマンスへの影響は最小限に抑えられますが、古いブラウザでは、ユーザーのブラウザ コンソールが開いていない場合に JavaScript エラーが発生しますlog is not a function of undefined
。これは、console.log 呼び出しの後のすべての JavaScript コードが実行されないことを意味します。
が有効なオブジェクトかどうかを確認するラッパーを作成し、ラッパーで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/
この jsPerf テストを作成しました: http://jsperf.com/console-log1337
他の関数呼び出しよりも時間がかからないようです。
コンソール API を持たないブラウザはどうですか? デバッグに console.log を使用する必要がある場合は、Paul が回答で提案しているように、コンソール API をオーバーライドするスクリプトを本番環境のデプロイに含めることができます。