微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

chrome 控制台保留了多少日志消息?

如何解决chrome 控制台保留了多少日志消息?

最近我试图调试导致 Chrome 选项卡因内存不足错误而崩溃的内存泄漏,我认为可能的原因是在控制台中连续记录大对象。

基本上我的代码类似于:

websocket1.onmessage = (m) => {console.log(JSON.parse(m.data)); ...}

当数据很小时,无限期地保持标签页打开是没有问题的。但是,如果数据量很大,选项卡要么没有响应,要么完全耗尽内存。

我创建了以下代码来测试我的理论:

<html>
    <head>
        <script>

var iteration = 0;
function start() {
    var obj1 = new Array(1500).fill(0).map((x,i) => i + iteration);
    iteration++;
    if (document.getElementById("hi").value === "") {
        console.log(iteration,obj1);
    }
    window.setTimeout(start,10);
}

        </script>
    </head>
    <body onload="start()">
        <input id="hi"/>
    </body>
</html>

我在 Chrome v91 中观察到以下行为:

  1. 记录到控制台的对象只要可见就不会被垃圾收集(回想起来这是显而易见的,否则你将无法看到它们)。

  2. 如果控制台被清除,则对象被垃圾回收。

  3. 如果开发者控制台关闭,那么当开发者控制台重新打开时(通过在输入中输入一个值停止记录后),控制台中最多有 1000 条消息。在此之后,旧的消息会被自动垃圾回收。

  4. 如果打开了开发者控制台,则控制台中的消息数量没有限制(至少在内存不足之前)。

这个问题主要是作为一个公共服务公告,但有人可以确认我的观察是 chrome 中的实际行为吗?此外,查看对象是否因为在控制台中可见而被保持打开的最简单方法是什么?我无法解释 chrome 内存分析器的结果,基本上是猜测工作让我相信泄漏可能是由于 console.log

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。