我的应用中有很多console.log()。他们中的大多数都是陷阱,所以我可以清楚地看到开发时出了什么问题。有些是记录当前时间,所以我可以检查功能执行时间。
部署到生产时,那些console.log()将在客户端的设备中运行。我可以把它们原样留下吗?它们会损害性能/内存还是可能导致一些异常或不需要的行为?
答案 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块)。
我通常一直在做两件事:
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)
// })
}
}
eslint
禁止使用任何console.log
语句