Chrome调试器中的“(程序)”是什么?

184

在 Chrome 调试器的函数列中,“(program)” 是什么?

3个回答

101

(程序)是Chrome浏览器本身,它是调用所有其他代码的树的根...它之所以存在是因为从本地代码到JavaScript、资源加载等跳转需要有一个起点 :)

您可以在Chrome开发者工具文档中看到treeview示例


44
啊,如果那个百分比很高,我能做些什么吗? - hvgotcodes
2
@hvgotcodes - 应该是所有部分下面的百分比。现在,如果self的百分比很高,除非你的标记通常非常重,否则你无能为力。 - Nick Craver
1
请问您知道如何访问“(程序)”部分的代码吗?我目前正在处理的项目中,某些JavaScript部分最终会出现在那里,而我唯一能够通过调试器进入的方式是将“debugger;”放置到代码中,这并不是很方便。 - Jaroslav Záruba
6
我认为这实际上是错误的,@user1009908的回答是正确的。它不是根节点,而是本地代码。这一点得到了支持,因为树形视图示例未将其显示为根节点。 - studgeek
1
@studgeek,就你的代码而言,这是树的根节点,在几乎所有情况下都是如此 - 非常非常少见的是有js->本地->js的转换,这就是我在这里的意思,我认为这很清楚...我明确表示它是本地代码。 - Nick Craver
3
关于高百分比的program(),有时候CSS动画会导致CPU使用率升高,这将反映在program()中。不幸的是,剖析器无法帮助准确定位问题源头。 - ılǝ

33

我认为(程序)是本地代码而不是树的根。

参见此线程:

https://bugs.webkit.org/show_bug.cgi?id=88446

所以更像系统调用,而不像主函数。

显然它包括空闲时间。 此外,可从 chrome://profiler/ 进行(程序)的一些分析。


9
同意 - 但是需要更新一下:现在它不包括空闲时间了。现在空闲时间将被单独报告为 (idle)。 - Gio

15

正如@Nick所说,它必须从某个地方开始。

看起来CPU Profiler部分与许多基于gprof相同概念的其他分析器类似。

例如,self几乎是一个无用的数字,除非有像编辑大量数字数组的冒泡排序之类的代码。这种情况很少见。

Total应该包括被调用者,因此更有用。但是,除非在阻塞时间和运行时间期间进行采样,否则它仍然几乎没有用处,除了对于完全受限于CPU的程序。

它通过函数而不是代码行为您提供这些统计数据。这意味着(如果您可以依赖Total百分比),该函数的成本就是这么多,也就是说,如果您可以通过存根使其花费零时间,那么这个百分比就是您将节省的时间。

因此,如果您想专注于昂贵的函数,则需要在其中搜索可以优化的内容。为了做到这一点,您需要知道时间是如何在函数的代码行之间细分的。如果您按代码行成本计算,它将直接带您进入那些行。

我不知道你是否能获得更好的分析工具,比如可以按照代码行报告的墙上时钟堆栈采样器,例如Zoom。这是我的做法


@hvgotcodes:不太确定。我不用它们,因为我只在调试器中获取堆栈快照。但你是在Linux上,对吧?你能否获得Zoom的试用版?它非常好用。 - Mike Dunlavey
@hvgotcodes:那么,我能提供的唯一帮助就是我依赖的方法。 - Mike Dunlavey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接