5

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

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

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

问题:
如果每毫秒都很重要,那么对大量函数参数进行洗牌的最佳和最结构化的方法是什么?

谢谢!

4

3 回答 3

2

我认为一个好的优化器会使这种微优化变得微不足道。随意使用更适合您的编码风格和代码阅读习惯的那个。如果您更喜欢对象,因为它更紧凑,请继续使用对象。如果您更愿意明确说明论点,那么就这样做。

于 2012-12-19T23:31:57.897 回答
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);

~1440 毫秒

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);

~2236 毫秒

于 2013-08-27T19:43:53.963 回答
1

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

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

仅当您有很多参数(5 个或更多)并且这是组织它们的好方法时才使用此选项,而且您将获得传递参数的能力,而与它们的正确位置无关。

于 2012-12-19T23:37:32.717 回答