我有jsperf test case,结果非常令人困惑。我有三个"摘要":
for (var i = 0; i < nNumbers; i++) {
result += a[i] / b[i];
}
console.log(result);
然而,当控制台从没有开启时,我得到了截然不同的结果。控制台日志记录的减速似乎压倒了任何其他性能问题。
所以我试着在每个&#34;片段中加快迭代次数,&#34;最小化相对于我尝试测试的操作的日志记录量。但我仍然没有在三个片段之间产生明显的速度差异。实际上,除法和乘法都与评估常数?我一定做错了什么。或者jsperf坏了。
已经回答了相关问题,但我发现没有任何特定于Javascript基准测试的问题。
答案 0 :(得分:1)
请勿将console.log
放入您的定时部分。在与您实际想要测量的操作进行比较时,速度非常慢,因此会使您的结果出现偏差。另外 - 正如您所注意到的那样 - 控制台打开时的时间会有所不同。
您可以将结果放在全局数组中来防止deoptimisations。优化器只能remove code不影响结果,如果它操纵全局状态则不可能。
当然,这仍然不一定会阻止loop-invariant code motion,因此您还需要确保定时代码始终对不同的数据进行操作。