Chrome开发工具:“时间轴”分析中火焰图和内存图之间的分歧/错误

时间:2015-07-12 12:31:16

标签: profiling google-chrome-devtools

在尝试调试长时间运行的内存泄漏代码时,我发现内存图和火焰图之间存在差异。我怀疑这是一个“自然”的阅读错误。

我试图用非常简单的代码重现这种行为并且成功了......

Chome dev tools showing the "Timeline" profiler - zoomed out

在分析此代码时记录了上面的图表:

    window.onload = function() {

        var count = 0;

        function addDelayed() {
            count++;

            if (count > 50) {
                return;
            }

            var x = document.createElement("div");
            x.addEventListener("click", function() {

            });

            setTimeout(function() {
                addDelayed();
            }, 1000);
        }

        setTimeout(function() {
            addDelayed();
        }, 10000);

    };

我已经放大了listener任意增加以了解它何时发生:

Chome dev tools showing the "Timeline" profiler - zoomed in

我预计nodelistener加注大约是Function call的一半,而不是它后面。

我可以假设这是一个测量错误,还是我忘记考虑其他因素?

这是使用Chrome 43.0.2357.125(64位)录制的(但旧版本也可以观察到此行为)

1 个答案:

答案 0 :(得分:1)

时间轴在计时器触发事件​​完成后立即捕获事件侦听器/ dom节点的数量。我们为许多其他事件这样做,所以步骤将在相应事件结束时。在事件中间某处显示它将是不公平和不精确的,因为我们不知道数字改变的确切时刻。另一方面,跟踪每个单独的节点/监听器创建/删除会导致更大的检测开销,我们希望避免这种开销。