我经常发现自己在功能之间传递了很多参数。看起来像这样:
ajaxLiveUpdate : function (bindTo, func, interval,
dyn, el, lib_template, locale, what) {
// do sth
}
虽然我可以看到将它们存储在对象specs
中会“视觉上”有意义但我很好奇创建对象的性能影响,协调所有键/值对并传递对象
问题:
如果每个ms都计数,那么对于大量函数参数进行混洗的最佳和最结构化的方法是什么?
谢谢!
答案 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个或更多)并且这是一种很好的组织方式时,您还可以独立于其合法位置传递参数。