Dim*_*off 18 javascript performance
在Web和框架中看到类似的代码是很常见的:
var args = Array.prototype.slice.call(arguments);
Run Code Online (Sandbox Code Playgroud)
在这样做时,您将参数Object
转换为实数Array
(尽管JS具有真正的数组),它允许您在Array原型中应用的任何数组方法等应用于它等.
我记得在某处读取arguments
直接访问Object的速度明显慢于Array克隆,或者明显选择命名参数.是否有任何事实,在什么情况下/浏览器会导致性能损失?你知道的关于这个主题的任何文章?
从http://bonsaiden.github.com/JavaScript-Garden/#function.arguments 更新有趣的发现,这使我之前阅读的内容无效...希望这个问题可以从写这篇文章的@Ivo Wetzel那里获得更多答案.
在该部分的底部,它说:
表现神话和真相
始终创建arguments对象,只有两个例外,即在函数内部或其形式参数之一声明它的名称.无论是否使用都无关紧要.
这与http://www.jspatterns.com/arguments-considered-harmful/冲突,其中指出:
但是,出于以下原因使用参数不是一个好主意:
- 性能
- 安全
每次调用函数时都不会自动创建arguments对象,JavaScript引擎只会按需创建它(如果使用的话).而且这种创造在性能方面并不是免费的.使用参数与不使用参数之间的差异可能会慢1.5到4倍,具体取决于浏览器
显然,不能两者都是正确的,那么它是哪一个呢?
ECMA顽固的Dmitrty Soshnikov说:
究竟"JavaScript引擎"是什么意思?你在哪里得到这个确切的信息?虽然,在某些实现中可能是正确的(是的,这是一个很好的优化,因为在解析代码时可以获得有关上下文的所有必需信息,因此如果在解析时找不到,则不需要创建参数对象),但是当你知道ECMA-262-3语句,每次进入执行上下文时都会创建参数对象.
归档时间: |
|
查看次数: |
3636 次 |
最近记录: |