React Native - console.log()在进入生产时会损害性能吗?

时间:2016-08-27 14:35:23

标签: react-native console.log

我的应用中有很多console.log()。他们中的大多数都是陷阱,所以我可以清楚地看到开发时出了什么问题。有些是记录当前时间,所以我可以检查功能执行时间。

部署到生产时,那些console.log()将在客户端的设备中运行。我可以把它们原样留下吗?它们会损害性能/内存还是可能导致一些异常或不需要的行为?

4 个答案:

答案 0 :(得分:23)

来自React Native文档:

  

Console.log语句

     

运行捆绑的应用程序时,这些语句可能会导致JavaScript线程出现大瓶颈。这包括调试库(如redux-logger)的调用,因此请确保在捆绑之前删除它们。

所以是的..我会删除它们:))

你的catch语句中的那些可能可以保留,因为它们只有在出现问题时才会触发(宁愿获取更多信息而不是担心性能损失)

有关反应原生文档here

的更多性能提示

答案 1 :(得分:2)

这是一个很好的做法,禁用整个应用程序中的所有console.log语句吗?

有任何副作用吗?

在文件顶部: App.js 包括:

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

答案 2 :(得分:1)

嗯..是的。更多代码意味着更长的执行时间。它不仅会占用不必要的CPU和电源,而且console.log也是同步的,因此它会使您的应用程序变慢(甚至几纳秒)。

但是,如果你想使用调试,你应该真正关注Winston。它是异步的,所以它解决了上述问题。

如果你不在乎毫秒,那么我会离开它,尽管it doesn't take much to let the bundle creator strip code that's going to be production ready。您可以执行以下操作:

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

答案 3 :(得分:0)

ReactNative文档advices to remove them

其中一种方法是使用babel插件删除console.log语句。我发现它很有用,但不一定正确,因为我希望在调试应用程序时查看一些日志,并且仍然可以在生产中发生这种情况时得到通知(例如,op提到的catch块)。

我通常一直在做两件事:

  1. 使用dlog代替console.log
export const dlog = (message: string, ...optionalParams: any[]) => {
  if (__DEV__) {
    // eslint-disable-next-line no-console
    console.log(message, ...optionalParams)
  } else {
    // Logging to Sentry or another bug-tracking system
    // withScope(scope => {
    //  scope.setExtra('params', optionalParams)
    //  captureMessage(message)
    // })
  }
}
  1. 确保eslint禁止使用任何console.log语句