【发布时间】:2013-11-30 14:39:22
【问题描述】:
如果我执行以下操作:
var abs = Math.abs;
abs(-10) 不应该比Math.abs(-10) 快吗?因为abs是直接调用的。
这引起了我的注意: Math.abs vs custom abs function
更新:
在 Internet Explorer 11 中执行的相同测试显示了完全不同的结果:
我推测这是由于对 Chrome 的 V8 引擎中的内置函数进行了一些优化。
nnnnnn 创建的测试澄清了我想说的:Property shortcut
【问题讨论】:
-
为什么使用附加变量调用相同的函数会更快。我认为您不了解缓存和按引用传递的工作原理。
-
"abs(-10) 不应该比 Math.abs(-10) 快吗?"呃,你到底为什么会这样想?因为它的字符更少?
-
只是为了迂腐,JavaScript 函数没有“所有者”。
-
@adeneo - 是的,这是一个测试,使用一种方法对简单对象(在 Chrome 中)更快:jsperf.com/property-shortcut
-
我推测 Chrome 的 JS 到本机代码编译器有一些数学原语的内在代码,并将内联调用。将函数放入变量中会以某种方式破坏该优化。请注意,在 Firefox 中它们具有相同的性能。
标签: javascript optimization jsperf