web-dev-qa-db-ja.com

React Native-console.log()は本番環境に移行するときにパフォーマンスを低下させますか?

アプリにたくさんのconsole.log()があります。それらのほとんどはキャッチブロックにあるので、開発時に何が悪かったのかがはっきりとわかります。関数の実行時間を確認できるように、現在の時刻をログに記録するものもあります。

本番環境にデプロイする場合、これらのconsole.log()はクライアントのデバイスで実行されます。そのままにしておいてもいいですか?それらはパフォーマンス/メモリを損なうのでしょうか、それとも例外や望ましくない動作を引き起こす可能性がありますか?

15
Yaron Levi

From React Native docs:

Console.logステートメント

バンドルされたアプリを実行する場合、これらのステートメントはJavaScriptスレッドに大きなボトルネックを引き起こす可能性があります。これには、redux-loggerなどのデバッグライブラリからの呼び出しが含まれるため、バンドルする前に必ず削除してください。

そうそう..私はそれらを削除します:)

キャッチステートメントにあるものは、問題がある場合にのみ起動するため、そのままにしておいてもかまいません(パフォーマンスの低下を心配するよりも、その情報を取得したい)

React Nativeドキュメントには、パフォーマンスに関するその他のヒントがあります ここ

26
David

アプリ全体ですべてのconsole.logステートメントを無効にするのは良い習慣ですか?

副作用はありますか?

ファイルの先頭:App.jsインクルード:

// To assign console.log to nothing   
if (!__DEV__) {
  console.log = () => {};
}
3

はい、そうです。コードが多いほど、実行時間が長くなります。不要なCPUの「パワー」が必要になるだけでなく、console.logも同期しているため、アプリケーションの速度が低下します(数ナノ秒でも)。

ただし、デバッグを使用する場合は、実際に Winston を調べる必要があります。非同期なので、前述の問題を解決します。

ミリ秒をあまり気にしない場合は、そのままにしておきますが、 バンドル作成者が本番環境に対応するコードを削除するのにそれほど時間はかかりません 。次のようなことができます。

if(__DEV__) {
    console.log('This will be stripped in production.');
}
2
bitten