我怎样才能避免;“优化远离”;我的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
- 倍增
- 分部
- 控制(两个操作均未完成)
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倍。我想问题已经解决了。