在尝试调试长时间运行的内存泄漏代码时,我发现内存图和火焰图之间存在差异。我怀疑这是一个“自然”的阅读错误。
我试图用非常简单的代码重现这种行为并且成功了......
在分析此代码时记录了上面的图表:
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
任意增加以了解它何时发生:
我预计node
和listener
加注大约是Function call
的一半,而不是它后面。
我可以假设这是一个测量错误,还是我忘记考虑其他因素?
这是使用Chrome 43.0.2357.125(64位)录制的(但旧版本也可以观察到此行为)
答案 0 :(得分:1)
时间轴在计时器触发事件完成后立即捕获事件侦听器/ dom节点的数量。我们为许多其他事件这样做,所以步骤将在相应事件结束时。在事件中间某处显示它将是不公平和不精确的,因为我们不知道数字改变的确切时刻。另一方面,跟踪每个单独的节点/监听器创建/删除会导致更大的检测开销,我们希望避免这种开销。