今天我访问了jsPerf,现在我想知道...
- “ops/sec”是什么意思?
- 它执行了多少次迭代?
- 它根据什么计算哪个更快?这些计算背后的公式是什么?
示例:http://jsperf.com/concatenation-vs-join
有人能告诉我吗?
今天我访问了jsPerf,现在我想知道...
示例:http://jsperf.com/concatenation-vs-join
有人能告诉我吗?
"ops/sec
" 代表每秒操作次数。也就是说,测试在一秒钟内执行的次数。
一个测试会重复执行直到达到需要的最小时间,以获得测量值不大于 1%
的 percentage uncertainty。迭代次数取决于环境计时器的分辨率以及测试在最小运行时间内可以执行的次数。我们收集完成的测试运行结果,持续 5
秒钟(可配置)或至少 5
次运行(同样可配置),然后对样本进行统计分析。因此,一个测试可能会重复执行 100,000
次,用时 50ms
(对于大多数环境而言是最小运行时间),然后再重复执行 100
次(5
秒)。更大的样本量(例如这个例子中的 100
)意味着更小的 margin of error。
我们基于除了 ops/sec 之外的 margin of error 来进行决定,例如,一个 ops/sec 更低但 margin of error 更高的测试可能与一个 ops/sec 更高但 margin of error 更低的测试在统计上无法分辨。
我们使用了类似于 SunSpider 的welch t-test,但因为 welch t-test 在比较低 ops/sec 和高 ops/sec 时会遇到方差过小的问题而导致自由度计算小于 1
,所以我们转用unpaired 2-sample t-test 来比较。因此,我们也为相似 ops/sec 的测试添加了 5.5%
的允差,因为实际测试表明,相同的测试可以在测试结果之间产生 ~5%
的波动。T-test 用于检查测试之间的差异是否statistically significant。