Array.prototype与[]的性能比较

7

我有一个快速问题,还没有机会深入了解。在调用/应用上下文中使用时,哪个更高效:Array.prototype还是[]

例如:

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 的方式更高效,因为可以重复使用原型函数,而不需要创建文字。虽然我不太确定。
在Chrome中使用JSPerf进行测试,似乎 Array.prototype 确实略微更高效: http://jsperf.com/array-perf-prototype-vs-literal

我期望Array.prototype.splice会更快,因为你列出的原因;它没有额外的对象创建。然而,这只是微小的优化,在这些情况下,你应该专注于可读性。 - Matt
“同意”。在您的意见中,哪个更易读?我倾向于使用Array.prototype,但在库中仍然看到[]被使用。 - Peter Dev
我也同意 Array.prototype 的观点,尽管 Dpolehonski 在他的回答中提到使用 [] 可以减少字节数,这一点很有道理。我认为两种方法的好处都非常微小,更多地取决于个人偏好。 - Matt
尝试使用修订版3,它真正作用于参数对象。 - Bergi
1个回答

3
它取决于运行它的浏览器。在Chrome中,.prototype似乎更快,Firefox两者之间没有差别,但通常比Chrome慢。IE9显示了一个很大的速度增加,但是它是迄今为止最慢的浏览器。然而,这种优化非常小,人们可以认为节省的时间抵消了阅读代码所需的额外字节。如果这些是您遇到的最大性能问题,那么您确实没有任何优化问题!我编辑了一个额外的测试here,我在其中使用了传递到函数中的数组来调用splice函数,在IE、Chrome和Firefox中都显示出比两者都快的速度。我的结论是,如果您已经有了方便的数组,请使用它,否则请使用prototype。

谢谢大家提供的帮助!数组函数缓存的想法很聪明。我在不同的浏览器中尝试了修订版本,得出了相同的结论,这取决于浏览器的JS引擎。此外,我也同意微小优化的观点。我的大多数性能问题来自DOM交互。 - Peter Dev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接