分析应用商店应用中 JavaScript 函数的计时数据
本主题介绍性能和诊断中心中的 JavaScript 函数计时工具的报告视图中提供的 JavaScript 代码的性能数据。 若要收集 JavaScript 函数计时数据,请参阅以下主题之一:
在本主题中
打开分析报告文件
分析数据的类型
分析报告视图的类型
分析报告视图
“摘要”视图
“函数详细信息”视图
“调用关系树”视图
“调用方/被调用方”视图
“模块”和“函数”视图
自定义数据网格视图
打开分析报告文件
从 Visual Studio IDE 中停止某个分析运行后,将自动在一个文档中显示性能数据。
若要打开由 VSPerf 命令行工具生成或在上一次分析运行后保存的分析报告 (.vspx) 文件,请执行下列操作:
如有必要,请打开 Visual Studio。
在**“文件”菜单上,选择“打开文件”**。
在**“打开文件”**对话框中,导航至分析报告文件所在的文件夹,然后选择该报告文件。
分析数据的类型
函数的分析数据包括总时间、平均时间、最短时间、最长时间和百分比。 为两组计时值计算该数据:
**“已用非独占时间”**值是函数所用的总时间。
**“已用独占时间”**值是函数仅执行其自身代码所用的时间。 这些值不包括子函数中所用的时间。
分析报告视图的类型
分析报告视图以两种方式显示数据:
调用关系图视图显示有关执行路径上下文中函数的信息。 “摘要”窗口上的**“热路径”**树显示应用程序在分析运行期间累积所用时间最多的执行路径。 “调用关系树”视图是分析运行期间所有函数的一个调用关系图。 “函数详细信息”和“调用方/被调用方”视图侧重于所选函数,显示调用所选函数的函数及所选函数调用的函数。 调用关系图视图可帮助你发现算法中的性能问题
函数列表视图按某个所选数据列对函数进行排序并列出函数。 “摘要”页上的**“大部分时间单独工作的函数”**列表显示执行其自身代码所用时间最多的函数,其中排除函数调用子函数的时间。 “模块”视图按 JavaScript 代码的源文件(对于其他语言按模块)将函数进行分组。 “函数”视图是一个单独的列表,其中只有函数。
分析报告视图
“摘要”视图
“摘要”页提供两个有关分析数据的视图,一般可为你指出最适合进行性能优化的部分。
**“热路径”**树显示应用程序在分析运行期间累积所用时间最多的调用堆栈。 了解此算法占用时间如此之多的原因即便于进行优化。
**“大部分时间单独工作的函数”**列表显示十个使用独占时间最多的函数。 可通过优化函数代码或减少调用这些函数的次数,迅速地显著提高性能。
“函数详细信息”视图
**“开销分布”**条形图表示所选函数与执行所选函数的调用函数之间的关系,以及所选函数与其调用的其他函数之间的关系。
“调用函数”条显示调用所选函数的函数。 调用函数块的大小指示调用函数所用时间占所选函数总执行时间的百分比。
**“所选函数”条指示所选函数执行其自身代码(“函数体”**块)所用时间占总执行时间的比率以及执行所选函数调用的其他函数所用的时间。
**“被调用函数”**条显示被所选函数调用的其他函数。 被调用函数块的大小指示被调用函数中所用时间占被调用函数总执行时间的百分比。
“调用关系树”视图
可使用“调用关系树”视图浏览在应用程序中遍历的函数执行路径。 关系树的根是应用程序的入口点。 每个函数节点都列出它调用的所有函数以及有关这些函数调用的性能数据。 “调用关系树”视图中的函数值对应于调用关系树中父函数所调用的其他函数实例。 百分比值是函数实例值的时间与分析运行总执行时间之比。
若要集中关注“调用关系树”视图的一个节点,请选择该节点,然后在快捷菜单上选择**“设置根”。 设置根节点后,将从视图中排除所选节点的子树之外的所有其他条目。 若要将根节点重置回原始节点,请在快捷菜单上选择“重置根”**。
“调用关系树”视图列
列名称 |
说明 |
---|---|
调用数 |
调用关系树中父函数对函数的调用数。 |
已用非独占时间百分比 |
运行此函数所用执行时间的总百分比。 |
已用独占时间百分比 |
运行函数体所用执行时间的总百分比。 其中排除在该函数调用的其他函数中所用的时间。 |
平均已用非独占时间 |
运行此函数所用的平均时间。 |
平均已用独占时间 |
运行此函数所用的平均时间。 其中排除在该函数调用的其他函数中所用的时间。 |
模块名 |
对于 JavaScript 函数,为函数所在源文件的名称。 否则,为函数所在模块(.dll 或 .exe)的名称。 |
“调用方/被调用方”视图
“调用方/被调用方”视图是“摘要”视图的“函数详细信息开销分布”条形图中包括所有计时详细信息在内的数据的树表示形式。 使用“调用方/被调用方”视图可调查所选函数与调用它的函数和它调用的函数之间的关系。 “调用方/被调用方”视图由三个网格组成。
中间网格中显示的**“当前函数”显示有关所选函数的分析信息。 这些值包括对函数的所有调用。 顶部网格中显示“调用当前函数的函数”,而底部网格中显示“由当前函数调用的函数”**。 当前函数的值是从对该函数的所有调用得到的总数。 调用和被调用函数的值仅包括调用所选函数或被所选函数调用所用的时间。
若要在函数的调用关系树中导航,请双击某个调用或被调用函数。 所双击的函数将成为新的所选函数。 其调用方和被调用函数现在可见。
“调用方/被调用方”视图列
列名称 |
说明 |
---|---|
调用数 |
|
已用非独占时间百分比 |
|
已用独占时间百分比 |
|
平均已用非独占时间 |
|
平均已用独占时间 |
|
模块名 |
对于 JavaScript 函数,为函数所在源文件的名称。 否则,为函数所在模块(.dll 或 .exe)的名称。 |
“模块”和“函数”视图
“模块”和“函数”视图显示分析报告中函数的分析数据的详细信息。 “模块”视图按 JavaScript 函数所属的 .js 源文件划分这些函数。 其他函数按模块(如 .dll)列出。 “函数”视图不按层次结构列出所有函数。 在“模块”视图中通常比在“函数”视图中更容易找到你自己的代码,但你可能会发现在“函数”视图中更容易比较各个函数。
“模块”和“函数”视图列
列名称 |
说明 |
---|---|
调用数 |
对函数的调用数。 |
已用非独占时间百分比 |
执行函数所用的时间占分析运行期间总执行时间的百分比。 |
已用独占时间百分比 |
执行函数所用的时间占总执行时间的百分比。 此值排除在函数调用的其他函数中所用的时间。 |
平均已用非独占时间 |
函数的平均执行时间。 |
平均已用独占时间 |
函数的平均执行时间。 此值排除在函数调用的其他函数中所用的时间。 |
模块名 |
对于 JavaScript 函数,为函数所在源文件的名称。 否则,为函数所在模块(.dll 或 .exe)的名称。 |
自定义数据网格视图
可添加或移除数据列,还可更改列的显示顺序。 右击某个数据行,然后选择**“添加/移除列”**。
备注
对托管代码和本机代码使用检测方法时,将收集有关代码执行的其他信息,并在“应用程序非独占时间”和“应用程序独占时间”计时字段中显示这些信息。JavaScript 中不提供这些信息,因此“应用程序”值与“已用”值相同。建议不要将这些字段添加到视图中。
其他分析数据列
列名称 |
说明 |
---|---|
函数名 |
函数的名称。 |
函数地址 |
函数的地址。 |
函数行号 |
此函数在源文件中的起始行号。 |
调用数 |
对此函数进行的调用总数。 |
源文件 |
此函数的定义所在的源文件。 |
模块名 |
函数所在模块的名称。 |
模块路径 |
函数所在模块的路径。 |
进程 ID |
分析运行的进程 ID (PID)。 |
进程名 |
进程的名称。 |
时间独占探测开销 |
此函数由检测导致的时间开销。 其中不包括此函数调用的其他函数中的开销。 已从所有独占时间中减去探测开销。 |
时间非独占探测开销 |
此函数及其子函数由检测导致的时间开销。 其中包括此函数调用的其他函数中的开销。 已从所有非独占时间中减去探测开销。 |
已用独占时间 |
对此函数的所有调用的总已用独占时间。 |
最长已用独占时间 |
对此函数的调用的最长已用独占时间。 |
最短已用独占时间 |
对此函数的调用的最短已用独占时间。 |
已用非独占时间 |
对此函数的所有调用的总已用非独占时间。 |
最长已用非独占时间 |
对此函数的调用的最长已用非独占时间。 |
最短已用非独占时间 |
对此函数的调用的最短已用非独占时间。 |