性能
自 3.2.0 版(测试版)起。
性能标签页用于测量公式求值所花的时间。它会记录每一次求值,并以时间线和表格的形式显示:耗时、调用次数、调用链。您可以看到时间花在了哪里——包括 Ninext 自己触发的调用。
此标签页仅供管理员使用。它只显示一个图标——秒表,位于错误和代码搜索标签页之间;鼠标悬停时会显示其名称。可以在 Ninext 设置的“脚本管理器”部分中停用它:公式性能分析。
开始和停止测量
主按钮开始测量会采用所选开始方式的名称(首次求值时开始、下次点击时开始);测量期间,它会变为停止测量。旁边的小按钮显示所选开始方式和停止方式的图标,它会打开选择启动触发方式菜单,该菜单分为两部分。第一部分决定测量何时开始:
| 开始方式 | 效果 |
|---|---|
| 立即开始 | 点击后立即开始测量。这是默认设置。 |
| 首次求值时 | 在下一次公式求值时开始测量,并以该次求值作为时间起点。 |
| 下次点击时 | 在下一次点击性能标签页以外的地方时开始测量。在此之前,按钮会变为取消。 |
第二部分决定测量何时停止:
| 停止方式 | 效果 |
|---|---|
| 手动停止 | 通过停止测量按钮停止。这是默认设置。 |
| 10、30 或 60 秒后停止 | 倒计时从测量开始时算起。 |
| 求值结束时 | 与“首次求值时”配合提供:该次求值结束时(包括其后续的异步部分)停止测量。 |
| 松开鼠标按键时 | 与“下次点击时”配合提供:松开鼠标按键时停止测量。之后以异步方式继续进行的部分不会被测量。 |
这样,您只需测量自己关心的内容:打开一条记录、点击一个按钮、计算一个视图。这些选择在页面重新加载之前一直有效。
在测量等待其触发条件时,状态行会显示“已就绪——等待触发…”。测量期间,它会显示测量已进行的秒数、已记录的求值次数以及不同公式的数量。
须知
开始新的测量不会清空之前的结果:求值会在多次测量之间累加——在表格、计数和时间线中都是如此——直到点击清空为止。每次测量都会在时间轴上从零开始:因此,相继两次测量的条形会在时间线的开头相互重叠。若要单独查看一次测量,请在开始之前点击清空。
时间线
每次求值都是时间轴上的一个条形。嵌套或同时进行的求值会堆叠在多行上;每个公式都有固定的颜色,半透明的条形表示仍在进行中的求值。足够宽的条形会标出其字段名称(“表 ▸ 字段”),插件发起的调用前面还会加上“Ninext ▸”。视图会实时填充。它最多保留 20,000 次求值:超出部分会有一条说明给出被舍弃的求值次数,这些求值只由表格继续统计。
缩放方式:
- 鼠标滚轮,或在 Chrome 中用触控板双指捏合,以指针所在位置为中心缩放(双指滑动则为滚动);
- 双击某个条形会选中它并放大到该条形;
- 三个按钮:缩放至整个会话、缩小时间刻度和放大时间刻度。
表格

表格按公式对求值进行汇总:
| 列 | 内容 |
|---|---|
| 公式 | 被测量的公式。 |
| 调用次数 | 求值的次数。 |
| 总计(毫秒) | 累计耗时。 |
| 平均(毫秒) | 单次求值的平均耗时。 |
| 最大(毫秒) | 耗时最长的一次求值。 |
表格按总耗时从高到低排序,每秒更新一次;显示前 100 行,超过时会有一条说明(“显示 100 行,共 N 行——最耗时的在前。”)。超过 1,000 个不同公式时,其余公式会归入一行“……其他公式”。架构中的公式以与字段与公式中相同的方式呈现——面包屑导航、“Fx”、编辑按钮——当同一个公式出现在多个位置时,会附加“+N”。插件发起的调用会带有“Ninext”标记。
求值详情

点击某个条形或某一行即可打开详情:
- 公式的完整代码;
- 对于条形:开始、时长、记录,以及从根求值到此次求值的调用链,链上的每一环都可以点击;对于表格中的一行:测量值(调用次数、总耗时、平均耗时和最大耗时);
- 来源,适用于 Ninext 发起的调用;
- 变量(检查),适用于被检查公式的求值(见下文);
- 公式在架构中的位置,并附有跳转到代码的按钮;
- 底部为缩放到此次求值和检查此公式。
检查公式
在表格或时间线中选择一个公式,然后点击检查此公式。测量期间,该公式每次求值时,性能分析器都会记录每个用 var 或 let 声明的变量的值:显示值的预览,鼠标悬停时显示其类型。
检查标签页会列出这些求值,最新的在最上面;点击其中一个即可在时间线中找到它。一次只能检查一个公式;停止检查可结束检查。
有两个局限:重新赋值和循环变量不会被记录;而且被检查公式的耗时只能作为参考,因为记录本身也需要时间。
解读数字
- 耗时是包含式的:一个公式的耗时也包括它所求值的其他公式的耗时。
- 对于异步求值,耗时一直计算到其结束,包括数据加载。
- 两个公式完全相同的字段在表格中共用一行。
- 测量的对象包括公式、触发器、视图的列、控制台中的代码以及 Ninext 的调用。Ninext 自身的 JavaScript 不在测量之列。
- 测量时每次求值只增加几微秒的开销,不测量时则没有任何开销。结果保存在内存中:页面重新加载后就会消失。
