【发布时间】:2015-09-10 20:58:46
【问题描述】:
我正在阅读有关内存泄漏的信息,并且我了解使用 console.log() 将结构化对象(而不是字符串)写入控制台可能会导致内存泄漏。我的应用程序用户 Angular 的 $log.log() 做类似的事情。这会泄漏内存吗?
【问题讨论】:
标签: javascript angularjs memory-leaks
我正在阅读有关内存泄漏的信息,并且我了解使用 console.log() 将结构化对象(而不是字符串)写入控制台可能会导致内存泄漏。我的应用程序用户 Angular 的 $log.log() 做类似的事情。这会泄漏内存吗?
【问题讨论】:
标签: javascript angularjs memory-leaks
$log 服务在内部使用console.log - 来自source code:
var console = $window.console || {}, logFn = console[type] || console.log || noop, hasApply = false;
但是,您可以在需要时使用$logProvider.debugEnabled(false); 禁用控制台消息,因此只要您记得在生产中关闭调试消息,就可以安全使用。
【讨论】:
<script> 块中,还是有更好的方法来切换 debugEnabled?
console.log 也会产生内存泄漏,它会在浏览器的控制台面板中产生。它与当前的浏览选项卡无关。如果你打开 Chrome 的控制台,它会分叉另一个进程。
$compileProvider.debugInfoEnabled(false),并启用/禁用其他生产设置。您可以使用后端或构建工具将其注入 HTML 正文,或创建 settings.json 并将其数据与 browserify 或 webpack 集成。标志加载应该是同步的,并且发生在模块的配置阶段之前。
console.log 保存对原始对象的引用,因此您可以对其进行调试、更改等...这有时会导致内存泄漏,因为控制台中的引用是唯一的防止 GC 删除对象。
正如 ori 所说,在生产环境中关闭日志消息应该可以解决这个问题。对于您仍然希望在生产中使用的消息,我建议您记录 JSON.stringify()。
【讨论】: