我一直在尝试使用 Firebug 的分析器来更好地理解我们所看到的一些 JavaScript 性能问题的根源,但我对输出有点困惑。
当我分析一些代码时,分析器会报告配置文件(464.323 毫秒,26,412 次调用)。我怀疑 464.323 毫秒是这 26,412 个调用的执行时间的总和。
然而,当我深入研究详细结果时,我看到了带有average执行时间大于 464.323 ms,例如平均时间最长的结果报告以下详细信息:
Calls: **1**
Percent: **0%**
Own Time: **0.006 ms**
Time: **783.506 ms**
Avg: **783.506 ms**
Min: **783.506 ms**
Max: **783.506 ms**
另一个结果报告:
Calls: **4**
Percent: **0.01%**
Own Time: **0.032 ms**
Time: **785.279 ms**
Avg: **196.32 ms**
Min: **0.012 ms**
Max: **783.741 ms**
这两个结果之间的时间结果之和远大于 464.323。
那么,这些不同的数字意味着什么?我应该相信哪些?
每列都有一个说明,说明在 Firebug 中将鼠标悬停在其上方时的含义。我假设您可以自己阅读每一列的工作原理。但是,您肯定遇到过一些需要解释的奇怪行为。
The own time是函数在其内部执行代码所花费的时间。如果该函数没有调用其他函数,则own time应该是一样的time。但是,如果存在嵌套函数调用,则time还计算执行它们所花费的时间。所以,time几乎总是大于own time,并且在大多数情况下加起来会超过探查器报告的总时间。
然而,没有single功能time应大于探查器记录的 JavaScript 调用的总时间。这个问题绝对是一个错误,我可以理解为什么当 Firebug 给你提供如此矛盾的输出时你很难相信它。我相信我已经找到了这个错误发生的原因:AJAX。
AJAX 调用似乎导致对嵌套函数调用进行计数的列报告不正确的信息。他们最终计算了 JavaScript 执行的时间and向服务器发出请求。
您可以通过执行以下操作来重现此探查器错误:
- 访问任何使用 AJAX 的站点。 (我用了http://juicystudio.com/experiments/ajax/index.php http://juicystudio.com/experiments/ajax/index.php)
- 启用控制台/脚本调试。
- 打开分析器。
- 进行 AJAX 调用。 (多个可能更能说明问题。)
- 停止分析器,检查输出。
在这个例子中,关于time vs. own time, the own time每个函数的总时间加起来就是探查器的总时间,但是time列包含 AJAX 调用与服务器通信所花费的时间。这意味着time如果您只关注 JavaScript 的执行速度,则该列不正确。
情况变得最糟:因为time, 平均时间, min and max所有计数嵌套函数调用,如果您使用 AJAX,它们都是不正确的。最重要的是,任何最终使用 AJAX(在嵌套函数调用中)的函数也将错误地报告其时间。这意味着很多函数可能会报告不正确的信息!因此,在 Firebug 修复问题之前,暂时不要相信任何这些列。 (他们可能希望这种行为是这样的,尽管保持这种方式充其量是令人困惑的。)
如果您不使用 AJAX,那么就会出现另一个问题;如果您是或不是,请告诉我们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)