如何解释铬火焰图中的差距

时间:2017-09-01 22:10:23

标签: javascript google-chrome-devtools flamegraph

我试图更好地理解如何解释铬火焰图 在下面的图表中,_changeHandler显示为四个不同的块。 但事实上,我知道它只被召唤一次。

我在这里看到了一个类似的问题,声称这可能是一个错误,但那是四年前的事: What are this gap mean in Chrome devtools profile flame chart

enter image description here

问题:
在哪种情况下,chrome perf工具会在同一函数调用的火焰图中显示间隙?

真正的问题是它确实使整个图表无效。图形的底部碎片但顶部部分是相同的功能。我无法弄清楚如何理解这一点。

使用cpu限制时,问题会变得更加严重。 看第二张图片,它与第一张图片的操作相同,但cpu限制设置为5倍减速。
"功能调用"下的碎片吧是一个单一的函数调用,由于某种原因,它在数百个部分中被分割。

enter image description here

1 个答案:

答案 0 :(得分:2)

  

事实是,我们通过抽样获得JS函数数据(与我们通过仪器启动/停止获得的本机事件不同)。所以内部只有4个样本落入上述功能。我们不知道它是执行了一次还是4次或100次,但是我们尽力将它们粘合起来,只要样本是相邻的,它就像一次调用一样。

     

但有时这种逻辑会神秘地失败。大多数情况下,这是因为在对JS堆栈进行采样时遇到了一些问题(如果某些内联函数或本机函数位于顶部,我们有时无法正确展开堆栈)。

来源:与DevTools工程师聊天

如果你想privately submit a url / steps to reproduce,团队可以查看。他们认为他们修复了这类错误。