今天我访问了jsPerf,现在我想知道......</p>
- 什么是“操作/秒”?
- 它做了多少次迭代?
- 它根据什么计算哪个更快?这些计算背后的公式是什么?
示例:http: //jsperf.com/concatenation-vs-join
谁能告诉我?
今天我访问了jsPerf,现在我想知道......</p>
示例:http: //jsperf.com/concatenation-vs-join
谁能告诉我?
我编写了jsPerf使用的Benchmark.js 。
" ops/sec
" 代表每秒操作数。这是预计测试在一秒钟内执行的次数。
重复执行测试,直到达到获得小于或等于测量的百分比不确定性1%
所需的最短时间。迭代次数取决于环境计时器的分辨率以及测试在最短运行时间内可以执行的次数。我们收集完成的测试运行5
几秒钟(可配置),或至少5
运行(也可配置),然后对样本进行统计分析。因此,测试可能会100,000
在50 ms
(大多数环境的最短运行时间)中重复多次,然后再重复100
多次(5
秒)。更大的样本量(在本例中,100
),导致较小的误差范围。
我们通过考虑误差幅度来决定哪种测试更快的不仅仅是操作/秒。例如,具有较低 ops/sec 但较高误差范围的测试可能与具有较高 ops/sec 和较低误差范围的测试在统计上无法区分。
我们使用了welch t-test,类似于SunSpider使用的方法,但切换到未配对的 2-sample t-test以获得相等的方差(方差非常小),因为 welch t-test 在比较较低的 ops/sec 和更高的操作/秒时存在问题ops/sec 的方差很小,导致计算的自由度小于1
. 我们还为5.5%
具有类似 ops/sec 的测试添加了限额,因为真实世界的测试表明,相同的测试可以5%
从测试到重新测试。T 检验用于检查检验之间的差异是否具有统计显着性。
您可以阅读作者的Bulletproof JavaScript 基准测试文章。它使用Benchmark.js btw,它是开源的。