Javascript 如何解释铬火焰图表中的间隙

Javascript 如何解释铬火焰图表中的间隙,javascript,google-chrome-devtools,flamegraph,Javascript,Google Chrome Devtools,Flamegraph,我正试图更好地理解如何解读铬焰图表。 在下图中,changeHandler显示为四个不同的块。 但我知道事实上,它只被调用一次 我在这里看到了一个类似的问题,它声称这可能是一个bug,但那是四年前的事了: 问题: 在哪种情况下,chrome perf工具会在火焰图表中显示相同函数调用的间隙 真正的问题是它确实使整个图形无效。图的底部是片段,但顶部是相同的函数。我根本不知道该怎么理解 当使用cpu节流时,问题会成倍恶化。 请看第二张图,其操作与第一张图相同,但cpu节流设置为5倍减速。 “函数

我正试图更好地理解如何解读铬焰图表。
在下图中,changeHandler显示为四个不同的块。 但我知道事实上,它只被调用一次

我在这里看到了一个类似的问题,它声称这可能是一个bug,但那是四年前的事了:

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

真正的问题是它确实使整个图形无效。图的底部是片段,但顶部是相同的函数。我根本不知道该怎么理解

当使用cpu节流时,问题会成倍恶化。 请看第二张图,其操作与第一张图相同,但cpu节流设置为5倍减速。
“函数调用”下的分段条是单个函数调用,出于某种原因,它被分成数百个部分

问题是,我们通过采样获得JS函数数据(不同于我们通过检测start/stop获得的本机事件)。因此,在内部,只有4个样本进入了上述函数。我们不知道它是执行了一次、4次还是100次,但我们尽最大努力将它们粘合在一起,这样只要样本相邻,它就会显示为一个调用

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

来源:与DevTools工程师聊天


如果你愿意,团队可以检查一下。他们认为他们已经修复了这类错误。

知道它只被调用一次的方法是什么?@KayceBasques一条日志语句。显然,它反映了节流的内部实现。看起来像个虫子。谢谢你的解释!我很想提供进一步的反馈,但看起来我不被允许访问谷歌文档。我住在山景城,也许我可以顺便看看:D?我添加了一个额外的屏幕截图,以真正证明这对整个图形来说是如何成问题的。这让我发疯了!看看这个图表:。尝试调试时,我认为RequireJS多次加载了
AppHeader
。至少现在我知道只有一个电话了。