如果性能在Javascript中很重要,我应该传递封装在对象中的函数参数还是逐个传递?

时间:2012-12-19 23:08:53

标签: javascript performance function object parameters

我经常发现自己在功能之间传递了很多参数。看起来像这样:

ajaxLiveUpdate : function (bindTo, func, interval, 
                      dyn, el, lib_template, locale, what) {
   // do sth
}

虽然我可以看到将它们存储在对象specs中会“视觉上”有意义但我很好奇创建对象的性能影响,协调所有键/值对并传递对象

问题:
如果每个ms都计数,那么对于大量函数参数进行混洗的最佳和最结构化的方法是什么?

谢谢!

3 个答案:

答案 0 :(得分:2)

我认为一个好的优化器会使这种微观优化变得微不足道。随意使用适合您的编码风格和代码阅读习惯的更好。如果你喜欢一个对象,因为它更紧凑,继续使用一个对象。如果你想明确地拼写出来的话,那就去做吧。

答案 1 :(得分:2)

创建和传递对象时可能会有一些性能开销,而不仅仅是传递参数,但我怀疑这将是你的应用程序瓶颈。因为代码可读性,我会选择一个对象。

在V8(node.js v0.10.8)中试过。

console.time(44);
var f = function(a,b,c,d,e) {
    return a+b+c+d+e;
};
var s = 0;
for(var i=0;i<100000000;++i) {
    s += f(i,i*2,i+1,i-1,i*3);
}
console.timeEnd(44);
console.log(s);

<强>〜1440ms信息

console.time(44);
var f = function(x) {
    return x.a+x.b+x.c+x.d+x.e;
};
var s = 0;
for(var i=0;i<100000000;++i) {
    s += f({a:i,b:i*2,c:i+1,d:i-1,e:i*3});
}
console.timeEnd(44);
console.log(s);

<强>〜2236ms信息

答案 2 :(得分:1)

如果传递封装在对象中的参数,则会发生以下情况:

在JavaScript中,当您从对象检索值时,它与使用for子句解析数组的值相同。 JavaScript中的原因对象与关联数组相同。因此,您将浪费计算时间来通过密钥搜索您的值。

仅使用此选项,并且仅当您拥有大量参数(5个或更多)并且这是一种很好的组织方式时,您还可以独立于其合法位置传递参数。