2011-07-28 26 views
19

Node.jsコードがconsole.logステートメントで上書きされる場合は、パフォーマンスの問題を招待していますか?それはデバッグ/プロダクションのオン/オフを切り替える価値がありますか?私は、ロギングが一般的に大事にすることが重要であることを認識しました - しかし、コンソールの出力にパフォーマンスがヒットしたら、私は一般的に興味がありますか?Node.js console.log performance

クロムのクライアントサイドスクリプトでは、コンソールが開いているとパフォーマンスが低下するようです。

答えて

17

編集:

にconsole.logは同期であり、それはイベントループ

をブロックしている

私は、これは、低ぶら下げ果実です、そしてあなたのいずれかを与えることはほとんどないだろうと思いますロギングを無効にすると、高速バンプが発生します(クリティカルな部分で厳密に使用されていない場合)。おそらくにconsole.logは純粋なCで実装されても、あなたがsocket.ioで行うことができます同じように、生産にロギングをオフにすることができる利用可能ないくつかのモジュールがあります。

+0

@Raynosよりも優れていますが、まだログレベルを持つライブラリを使用すると便利です。 – Alfred

+1

素晴らしい!人生節約! –

+0

@レイノースは間違っています。パフォーマンスに大きな影響を与えます。私は 'GAMES'オブジェクトに60,000個のキーを持つconsole.logでテストしました。次に、チェックする前にコンソールがGAMESオブジェクトを記録している間に、プロパティが存在するかどうかを確認するために 'for 'を単に実行しました。そして目立った遅れがあった。 (3〜5秒)私はコンソールログを削除し、再度プロパティをチェックし直しました。これは、ノード内でレートリミッタを使用している場合、遅延によってシステムが非常に脆弱になるため、大きな問題です。 (ioが終了するまで、リミッターは正しく(または任意のコードで)実行されず、非常に危険です)。 –

9

console.logは、すべての呼び出しでDOMと実際にインターフェイスしているため、クロムの速度が遅くなります。 inspect elementシステム全体は、実際にはわずか数トンのDOM要素です。ブラウザでconsole.logに電話すると、すべての呼び出しでconsoleに新しい要素を追加する必要があります。

console.logは、consoleの要素を右クリックし、inspect elementをクリックすると、実際にHTMLだけであることがわかります。これは、実際には、既に存在するconsoleを検査する新しいconsoleを開きます。 :D

実際にパフォーマンスが心配な場合は、console.logの機能を完全に削除することができます(混乱を招く可能性があるため、あまりお勧めできません)。あなたは基本的にnoopブラウザまたはサーバー側の機能を行うことができます。これ以上のconsole.logこれ以上のスピードへの影響:Dは

console.log=function(){}; 
+3

答えてくれてありがとう、私はこれを投票したが、特にノードに答えたので、答えとして@Alfredを選択した。しかし、そのクロムに関する情報とそれがなぜ違うのかが有用でした。 – j03m

+0

これはクールです....:D – William

+2

node.js console.logはDOM – UpTheCreek

-3

としてはconsole.logは、非同期および非ブロックで、上記と述べ、それは関数呼び出しのための1つの目盛りを除いてあまりアプリケーションを遅くしないでしょう。

しかし、console.logを直接使用するのではなく、特定のレベルのいくつかのログを本番環境に配備するときに、一部のログをオフにするのは良い習慣です。 @ Alfredがリストされているようにいくつかの良いものがあります。

Nodejsの公式ブログでは、ログにJSON形式を使用することを示唆する記事を掲載しました。Service logging in JSON with Bunyanでチェックしてください。Bunyan for nodejsは本当に価値があります。

+4

'console.log'は** synchronous **で、イベントループをブロックしています – NoNameProvided

8

nodejsのconsole.log呼び出しは同期(!)で、イベントループをブロックします。私はちょうど私がpgを使って(非同期の)SQLクエリを実行した結果をログに記録したときにそれを経験しました。 20個のアイテムとその(いくつかの)プロパティのみをロギングすると、ローカルマシン上で3msから300msにパフォーマンスが低下しました。