Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我怎样才能避免;“优化远离”;我的javascript测试用例?_Javascript_Benchmarking - Fatal编程技术网

我怎样才能避免;“优化远离”;我的javascript测试用例?

我怎样才能避免;“优化远离”;我的javascript测试用例?,javascript,benchmarking,Javascript,Benchmarking,我有一个问题,结果很混乱。我有三个“片段”: 倍增 分部 控制(两个操作均未完成) 大多数时候,它们的速度都差不多。。。甚至控制!我猜JS JIT编译器是在它们似乎没有任何效果的时候出现的;所以我在测试循环完成时开始,例如 for (var i = 0; i < nNumbers; i++) { result += a[i] / b[i]; } console.log(result); for(变量i=0;i

我有一个问题,结果很混乱。我有三个“片段”:

  • 倍增
  • 分部
  • 控制(两个操作均未完成)
大多数时候,它们的速度都差不多。。。甚至控制!我猜JS JIT编译器是在它们似乎没有任何效果的时候出现的;所以我在测试循环完成时开始,例如

for (var i = 0; i < nNumbers; i++) {
  result += a[i] / b[i];
}
console.log(result);
for(变量i=0;i
但是,当控制台打开时,我得到的结果与未打开时大不相同。控制台日志记录的放缓似乎压倒了任何其他性能问题

因此,我尝试在每个“片段”中增加迭代次数,以尽量减少与我尝试测试的操作相关的日志记录量。但我仍然没有发现这三个片段之间的速度差异。真的,除法和乘法的速度都和计算常数的速度差不多??我一定是做错了什么。或者jsperf被破坏了

已经回答了一些相关的问题,但我发现没有一个问题是针对Javascript基准测试的


    • 不要将
      控制台。在计时部分中记录
      s。与您实际想要度量的操作相比,它的速度非常慢,因此会扭曲您的结果。此外,正如您所注意到的,当控制台打开或不打开时,时间会有所不同

      您可以通过将结果放入全局数组来防止去优化。乐观主义者只能选择不影响结果的方法,如果它操纵全局状态,这是不可能的


      当然,这仍然不一定会阻止,因此您还需要确保定时代码始终在不同的数据上运行。

      我得到了,每秒运行:mult:126k,div:33k,control:282k,这与预期的一样,因为计算机的除法速度很慢@dandavis我得到了类似的结果,也就是说,图表似乎不太正常,但数字本身很好。你能举一个将结果放入全局数组的例子吗?如果我声明
      var结果
      设置中
      代码,这是一个全局变量,还是必须将其放入准备代码中?它必须是数组而不是单个(标量)变量吗?(就循环不变代码而言,我相信我的测试片段已经对此免疫,因为循环的每次迭代都在
      a[I]
      b[I]
      上运行,其中
      I
      是循环变量。)将声明放在设置代码中就足够了,但这并不是真正的全球化——这取决于乐观主义者的先进程度。您添加到的标量也应该可以工作,但您只覆盖的标量可能不会工作。我看不到将结果放入全局变量的方法。我尝试将
      result
      (实际上是单数)的声明移到准备代码(请参阅)中,但现在我得到了一个
      ReferenceError:result未在每个代码段中定义
      。接下来我尝试使用
      window.result
      作为结果的全局变量:
      window.result+=…
      。这应该是一个全局变量。然而,我仍然得到奇怪的结果。。。除法现在比乘法快(控制在第一位或最后一位…每次都不同)到准备代码中,我在
      结果
      而不是
      窗口中积累答案。结果
      ,结果彼此之间似乎是合理的。。。尽管他们比以前快了10倍。我想问题已经解决了。