根据我遇到的几篇文章,两者应该具有相似的性能,而 test2 有一点优势。但这里完全相反。有人可以解释为什么会有巨大的差异吗?
编辑:我也理解它们之间的区别。请不要将此标记为此问题或其他讨论语义差异的问题的副本,并且不要回答我关于性能的问题。
谢谢你。
根据我遇到的几篇文章,两者应该具有相似的性能,而 test2 有一点优势。但这里完全相反。有人可以解释为什么会有巨大的差异吗?
编辑:我也理解它们之间的区别。请不要将此标记为此问题或其他讨论语义差异的问题的副本,并且不要回答我关于性能的问题。
谢谢你。
我也理解两者的区别。
您是否也了解这些语义差异?
请注意,jsPerf 将您的代码放在一个紧密的循环中,其执行时间是被测量的。函数声明需要为每次迭代创建一个块作用域,这大大减慢了测试速度。这几乎不是你想要衡量的。
随着 JavaScript 引擎现在使用的强大优化,像这样的微基准会产生一些误导性的结果。例如,我猜您要测量的是函数调用开销。但它看起来像您的代码编写方式,您可能每执行 10 次就(重新)定义函数定义和/或符号查找一次;我猜这不是本意。
在这个替代测试中,我安排了一些事情以避免重复定义函数,并添加了一些其他调用函数的方法。这将性能差异减少到我认为由实验噪声主导的东西。虽然这有时可能会有明显的差异,但考虑到实验误差水平,我不会认为它们具有统计学意义。换句话说,它将比赛减少为虚拟平局。
即使在方法之间存在一致差异的浏览器中,将函数缓存在局部变量中似乎也可以最大限度地减少定义和表达式之间的差异。