jsPerf如何工作?
今天我访问了jsPerf ,现在我想知道…
- 什么是“ops / sec”?
- 它做了多less次迭代?
- 它在什么基础上计算哪个更快? 这些计算背后的公式是什么?
例如: http : //jsperf.com/concatenation-vs-join
谁能告诉我?
提前致谢。
我写了jsPerf使用的Benchmark.js 。
-
“
ops/sec
”代表每秒的操作。 这是一次testing预计执行多less次。 -
重复执行testing,直到达到测量的百分比不确定度小于或等于
1%
所需的最短时间。 迭代次数取决于环境计时器的分辨率以及在最短运行时间内可以执行多less次testing。 我们收集完成的testing运行5
秒(可configuration)或至less5
运行(也可configuration) ,然后对样本进行统计分析。 因此,testing可能在50 ms
(大多数环境的最小运行时间)中重复100,000
次,然后重复100
次(5
秒) 。 较大的样本量(在本例中为100
)会导致较小的误差范围 。 -
我们决定哪个testing的速度比单纯的运算速度更快,同时也考虑了误差幅度。 例如,较低ops / sec但较高误差范围的testing可能与具有较高ops / sec和较低误差范围的testing在统计学上难以区分 。
我们使用了类似于SunSpider使用的Welch t检验 ,但是由于Welch t检验比较了较低的操作数/秒和更高的值,所以我们转而使用了不成对的双样本t检验以获得相同的方差(方差非常小) ops / sec的小偏差导致自由度被计算为小于
1
。 我们还在类似的操作/秒的testing中增加5.5%
津贴,因为真实世界的testing表明,相同的testing可以从testing到重新testing摆动〜55%
。 使用T检验来检查testing之间的差异是否具有统计显着性 。
您可以阅读作者的Bulletproof JavaScript基准testing文章。 它使用Benchmark.js btw,这是开源。