Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 正在从React本机应用程序中删除console.log_Performance_Automation_React Native_Console.log - Fatal编程技术网

Performance 正在从React本机应用程序中删除console.log

Performance 正在从React本机应用程序中删除console.log,performance,automation,react-native,console.log,Performance,Automation,React Native,Console.log,在将React本机应用程序部署到商店之前,是否应删除console.log()调用?如果console.log()调用保留在代码中,是否存在一些性能或其他问题 有没有一种方法可以通过某个任务运行程序删除日志(类似于Grunt或Gulp等与web相关的任务运行程序)?我们在开发/调试/测试阶段仍然需要它们,但在生产阶段不需要 谢谢 相信最佳实践是将调试代码包装在语句中,例如 if(__DEV__){ console.log(); } 这样,它只在您在packager或emulator中运

在将React本机应用程序部署到商店之前,是否应删除
console.log()
调用?如果
console.log()
调用保留在代码中,是否存在一些性能或其他问题

有没有一种方法可以通过某个任务运行程序删除日志(类似于Grunt或Gulp等与web相关的任务运行程序)?我们在开发/调试/测试阶段仍然需要它们,但在生产阶段不需要


谢谢

相信最佳实践是将调试代码包装在语句中,例如

if(__DEV__){
    console.log();
}
这样,它只在您在packager或emulator中运行时运行。更多信息请点击这里。。。

好吧,您可以随时执行以下操作:

if (!__DEV__) {
  console.log = () => {};
}

因此,只要
\u DEV\u
不正确,每个
控制台.log
都将失效。

Babel transpiler可以使用以下插件为您删除
控制台
语句:

npm i babel-plugin-transform-remove-console --save-dev
编辑.LRC:

{
  "env": {
    "production": {
      "plugins": ["transform-remove-console"]
    }
  }
}
console
语句从代码中剥离出来


来源:

使用
Sentry
跟踪异常会自动禁用生产中的
控制台.log
,但也会使用它跟踪设备中的日志。因此,您可以在sentry exception details(breadcrumbs)中查看最新的日志。

我发现以下是一个很好的选择,因为如果您不进行远程调试,即使u DEV_uu===true,也不需要记录日志

事实上,我发现RN/JavaScriptCore/etc的某些版本在登录时几乎停止(甚至只是字符串),而Chrome的V8引擎则不是这样

// only true if remote debugging
const debuggingIsEnabled = (typeof atob !== 'undefined');

if (!debuggingIsEnabled) {
    console.log = () => {};
}

我知道这个问题已经得到了回答,但我只想添加我自己的两位。返回
null
而不是
{}
稍微快一些,因为我们不需要在内存中创建和分配空对象

if (!__DEV__)
{
   console.log = () => null
}
这显然是非常小的,但是你可以看到下面的结果

//返回空对象
console.log=()=>{}
控制台。时间()
对于(var i=0;i null
控制台。时间()

对于(var i=0;i我使用
babel plugin transform remove console
尝试了它,但是上面的解决方案对我不起作用

如果有人也试图使用
babel-plugin-transform-remove-console执行此操作,则可以使用此操作

npmibabel插件转换删除控制台——保存开发人员

编辑
babel.config.js

module.exports = (api) => {
  const babelEnv = api.env();
  const plugins = [];
  if (babelEnv !== 'development') {
    plugins.push(['transform-remove-console']);
  }
  return {
    presets: ['module:metro-react-native-babel-preset'],
    plugins,
  };
};



这更清晰,应该是可以接受的答案。只要确保这些行在所有其他行之前运行。@csotiriou:那么这是否意味着在所有导入之前都在App.js的顶部?@raarts是的。但是我感觉react native会自动执行此操作,但仅适用于默认版本。在Xcode中,即使我添加了自定义版本build,它没有隐藏日志。但仍在尝试寻找替代方案。这在React JS中也有效吗?
\uuu DEV\uuuu
常量是否记录在某个地方?我喜欢这个答案。它非常干净,但是facebook的文档建议使用@adam指出的babel插件转换移除控制台。有人尝试过吗?它真的有效吗rk?最好使用-D而不是--save将其保存到devdependences。我尝试了这个方法,但在我的数据库中找不到.babelrc文件directory@JayakrishnanMenon显然,你必须创建。babelrc,并设置babel transpilerI。我在这方面有点不在行。你能再解释一下吗?这些环境是如何工作的?react native如何知道这是一个生产构建?是否也有登台和生产环境?您好,您可以链接到sentry的文档,说明如何禁用console.log吗?或者他们是否自动执行此操作而不需要任何配置?(我似乎找不到有关此操作的信息)@friedegg bacon sandwich他们自动执行此操作。太好了!:)但是你有一些文档的链接来证实这一点吗?我似乎找不到anywhere@TamRock文档非常糟糕:)但我为nodejs找到了这个。我猜他们把这种行为复制到了RN。