2012-07-20 27 views
7

快速的问题,我没有真正有机会看看。当在通话/应用类型的上下文中使用时,哪种性能更高:Array.prototype vs []Array.prototype vs [] perf

例如为:

function test1() { 
    return Array.prototype.splice.apply(arguments, [1, 2]); 
} 

test1([1,2,3,4,5,6,7,8,9]); 

function test2() { 
    return [].splice.apply(arguments, [1, 2]); 
} 

test1([1,2,3,4,5,6,7,8,9]); 

我的想法:我将承担Array.prototype方式是更好的性能,因为原型功能,可重复使用,没有文字的需要来创建。虽然不是很确定。

使用JSPerf(铬),它看起来像Array.prototype确实稍微更好的性能:

http://jsperf.com/array-perf-prototype-vs-literal

+0

我期望'Array.prototype.splice'因为你列出的原因更快;没有额外的对象创建。然而,这是一个微型优化,你应该关注这些情况下的可读性。 – Matt 2012-07-20 10:31:12

+0

*表示同意*您认为哪个更具可读性?我会倾向于Array.prototype,但会继续在库中看到[]。 – 2012-07-20 10:35:10

+0

虽然Dpolehonski在他关于减少字节的答案中提出了一个很好的观点,但我同意在它的表面上也有'Array.prototype'当使用'[]'时。我认为这两种方法的好处都很小,以至于个人偏好比任何其他方面都要好。 – Matt 2012-07-20 10:41:08

回答

3

这取决于它运行的浏览器。在铬看来,原型比较快,firefox显示两者之间没有区别,尽管通常比chrome慢。 IE9显示了.prototype的大幅提速,但是目前为止浏览速度最慢。

但是,这种优化是如此之小,以至于人们可能会认为节省的时间会抵消读取代码所需的额外字节。我虽然离题,但如果这些是您遇到的最大性能问题,那么您确实没有任何优化问题!

编辑:

我增加了一个额外的测试here我曾经传递到该函数数组调用剪接功能这表明了如比都在IE,铬和Firefox更快。 我的结论是,如果你已经有了数组,那就使用它,否则使用原型。

+0

谢谢你们真的很有帮助的意见!阵列fn缓存的想法很聪明。我在不同的浏览器中尝试过修订,也得出了相同的结论,这取决于浏览器的JS引擎。此外,同意关于微型优化。我的大部分性能问题都来自DOM交互。 – 2012-07-20 11:29:29