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

~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

于 2013-08-27T19:43:53.963 に答える
1

オブジェクトにカプセル化された引数を渡すと、次のようになります。

JavaScript では、オブジェクトから値を取得するときは、for 句を使用して配列を解析するのと同じです。原因 JavaScript のオブジェクトは連想配列と同じです。そのため、キーで値を検索するのに計算時間を無駄にします。

このオプションは、多くの引数 (5 つ以上) があり、それらを整理するのに適した方法である場合にのみ使用してください。さらに、正当な配置とは関係なく引数を渡すことができます。

于 2012-12-19T23:37:32.717 に答える