jsPerf如何确定哪个代码片段最快?

45

今天我访问了jsPerf,现在我想知道...

  1. “ops/sec”是什么意思?
  2. 它执行了多少次迭代?
  3. 它根据什么计算哪个更快?这些计算背后的公式是什么?

示例:http://jsperf.com/concatenation-vs-join

有人能告诉我吗?


1
  1. 它会运行每个给定的代码几秒钟(约4秒)。
- Šime Vidas
1
代码的OPS/秒越多,速度就越快(显然):) - Šime Vidas
2
另外,请阅读常见问题解答:http://jsperf.com/faq - Šime Vidas
2个回答

129
我写了 Benchmark.jsjsPerf 使用它。
  1. "ops/sec" 代表每秒操作次数。也就是说,测试在一秒钟内执行的次数。

  2. 一个测试会重复执行直到达到需要的最小时间,以获得测量值不大于 1%percentage uncertainty。迭代次数取决于环境计时器的分辨率以及测试在最小运行时间内可以执行的次数。我们收集完成的测试运行结果,持续 5 秒钟(可配置)或至少 5 次运行(同样可配置),然后对样本进行统计分析。因此,一个测试可能会重复执行 100,000 次,用时 50ms (对于大多数环境而言是最小运行时间),然后再重复执行 1005 秒)。更大的样本量(例如这个例子中的 100意味着更小的 margin of error

  3. 我们基于除了 ops/sec 之外的 margin of error 来进行决定,例如,一个 ops/sec 更低但 margin of error 更高的测试可能与一个 ops/sec 更高但 margin of error 更低的测试在统计上无法分辨。

    我们使用了类似于 SunSpiderwelch t-test,但因为 welch t-test 在比较低 ops/sec 和高 ops/sec 时会遇到方差过小的问题而导致自由度计算小于 1,所以我们转用unpaired 2-sample t-test 来比较。因此,我们也为相似 ops/sec 的测试添加了 5.5% 的允差,因为实际测试表明,相同的测试可以在测试结果之间产生 ~5% 的波动。T-test 用于检查测试之间的差异是否statistically significant


1
我一直想知道,在进行操作HTML表单元素的测试时,是否需要将它们“重置”为默认值,以便其他测试能够公平/准确地进行? - Gary Green
1
@GaryHole 是的,你需要在定时代码区域之外将所有内容重置为默认状态,以使其尽可能准确。 - Mathias Bynens
Ops/sec列中的±百分比是什么? - BornToCode

6

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