如果在JavaScript中性能很重要,那么我应该将函数参数封装在一个对象中还是逐个传递?

5

我经常发现自己需要在函数之间传递很多参数。看起来是这样的:

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

虽然我可以看出把这些内容存储在一个对象specs中在视觉上是有意义的,但我很好奇创建对象、分配所有键/值对并传递对象的性能影响。

问题:
如果每毫秒都很重要,那么最好和最有结构的方法是什么,以处理大量函数参数?

谢谢!


你是说,就保持现状不变? - frequent
谢谢。 - frequent
3个回答

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个或更多)且这是一种良好的组织方式时才使用此选项,此外,您将获得独立于其正确位置传递参数的能力。


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