Javascript Chrome Developer Tools Profiler显示与console.log不同的方法调用数

Javascript Chrome Developer Tools Profiler显示与console.log不同的方法调用数,javascript,google-chrome,google-chrome-devtools,performancecounter,Javascript,Google Chrome,Google Chrome Devtools,Performancecounter,我正在使用Chrome中开发工具的Profiles选项卡。在配置文件中,我看到一个函数resizeDocument的条目被调用了6次以上,其值为113ms、17ms、45ms等。相同的行号、相同的文件、相同的所有内容 当我在resizeDocument函数中从控制台登录时,我只得到一个条目。发生了什么事 原因是chrome中CPU分析器的特性。这是一个采样分析器。因此,它收集正在运行的程序的调用堆栈(示例),并使用它们重建图表视图中的条形图 例如,如果探查器在每个样本中的函数“foo”的一

我正在使用Chrome中开发工具的Profiles选项卡。在配置文件中,我看到一个函数
resizeDocument
的条目被调用了6次以上,其值为113ms、17ms、45ms等。相同的行号、相同的文件、相同的所有内容

当我在
resizeDocument
函数中从控制台登录时,我只得到一个条目。发生了什么事


原因是chrome中CPU分析器的特性。这是一个采样分析器。因此,它收集正在运行的程序的调用堆栈(示例),并使用它们重建图表视图中的条形图

例如,如果探查器在每个样本中的函数“foo”的一个调用帧中收集了1000个样本,那么您将看到1s长的带有“foo”名称的条

分析器可能无法收集下一个堆栈跟踪。例如,当探查器试图在函数“foo”调用函数“bar”时从堆栈中收集调用帧时,就会发生这种情况。此时,就在调用指令之后,函数“bar”在堆栈上为“foo”构造调用帧。因此,堆栈上的调用帧目前处于无效状态。探查器检测到这一点并丢弃样本。因此,堆栈跟踪序列中会出现间隙

在这种情况下,将为“foo”建造两个不同的钢筋


当探查器无法收集调用堆栈时,还有一些其他原因。

我注意到这里有一个“聚合总时间”,这在每种情况下都是相同的。也许有一些内部的V8奇怪的事情发生了,堆栈跟踪被屏蔽了?谢谢。所以没有办法(没有console.log)验证探查器中的两个条实际上不是两个函数调用?是的。具有这种保证的检测分析器比采样分析器更能保证应用程序的性能。因此,没有人需要不反映真实情况的数据。