【问题标题】:How does jsPerf determine which of the code snippets is fastest?jsPerf 如何确定哪个代码片段最快?
【发布时间】:2011-06-26 13:17:37
【问题描述】:

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

  1. 什么是“操作/秒”?
  2. 它做了多少次迭代?
  3. 它根据什么计算哪个更快?这些计算背后的公式是什么?

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

谁能告诉我?

【问题讨论】:

  • 2.它运行每个给定的代码几秒钟(~4 秒)
  • 3.具有更多 OPS/Sec 的代码更快(显然):)
  • 另外,阅读常见问题解答:jsperf.com/faq

标签: javascript performance benchmarking jsperf


【解决方案1】:

您可以阅读作者的Bulletproof JavaScript benchmarks文章。它使用Benchmark.js btw,它是开源的。

【讨论】:

    【解决方案2】:

    我写了Benchmark.jsjsPerf 使用它。

    1. ops/sec”代表每秒操作数。 这是预计测试在一秒钟内执行的次数。

    2. 重复执行测试,直到达到获得小于或等于1% 的测量值的percentage uncertainty 所需的最短时间。迭代次数将根据环境计时器的分辨率以及测试在最短运行时间内可以执行多少次而有所不同。我们收集完成的测试运行5(可配置),或至少5 运行(也可配置),然后对样本进行统计分析。因此,一个测试可以在50 ms 中重复100,000(大多数环境的最短运行时间),然后再重复1005 秒)。较大的样本量(在本例中为100,导致较小的margin of error

    3. 我们通过考虑误差幅度来决定哪种测试更快,而不仅仅是操作/秒。例如,具有较低 ops/sec 但较高误差范围的测试可能与具有较高 ops/sec 和较低误差范围的测试在统计上无法区分

      我们使用了welch t-test,类似于SunSpider 使用的,但是为了等方差切换到unpaired 2-sample t-test(方差非常小)因为 welch t 检验有问题将较低的 ops/sec 和较高的 ops/sec 与较小的差异进行比较,导致 degrees of freedom 被计算为小于 1。我们还为具有类似 ops/sec 的测试添加了5.5% 限额,因为现实世界的测试表明,相同的测试可以在测试之间摇摆 ~5%。 T-tests 用于检查测试之间的差异是否为statistically significant

    【讨论】:

    • 我一直想知道,在进行操纵 HTML 表单元素的测试时,是否需要将它们“重置”回默认值以使其他测试公平/准确?
    • @GaryHole 是的,您需要将定时代码区域之外的所有内容重置为默认状态,以使其尽可能准确。
    • Ops/sec 列中的 ±percentage 是多少?
    猜你喜欢
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 2011-11-08
    • 2015-12-24
    • 1970-01-01
    相关资源
    最近更新 更多