2012-12-19 2 views
5

Ich bin oft feststellen, dass ich viele Parameter von Funktion zu Funktion übergeben. Sieht wie folgt aus:sollte ich Funktionsparameter in einem Objekt oder eins nach dem anderen übergeben, wenn Leistung in Javascript wichtig ist?

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

Während ich, dass das Speichern diese in einem Objekt sehen konnte specs Sinn „visuell“ machen würde, ich bin neugierig in Bezug auf die Auswirkungen auf die Leistung der das Objekt erstellen, assinging alle Schlüssel/val Paare und das Objekt herumreichen.

Frage:
Wenn alle ms zählt, was ist die beste und strukturiert um eine große Anzahl von Funktionsparametern zu mischen?

Danke!

+0

Sie sagen, lassen Sie es wie es ist? – frequent

+0

ok. Hört sich gut an. Danke bis jetzt. – frequent

+0

willkommen, und +1, gute Frage. –

Antwort

2

Ich denke, ein guter Optimierer würde diese Mikro-Optimierung bedeutungslos machen. Fühlen Sie sich frei, den Code zu verwenden, der Ihrem Codierungsstil entspricht und die Lesegewohnheiten besser codiert. Wenn Sie ein Objekt bevorzugen, weil es kompakter ist, können Sie ein Objekt verwenden. Wenn Sie Argumente lieber ausdrücklich formulieren, dann tun Sie das.

1

Wenn Sie Argumente in einem Objekt eingekapselt passieren, hier ist was passiert:

In JavaScript, wenn Sie einen Wert von einem Objekt abrufen es das gleiche ist, wie Sie die für Klausel verwenden um ein Array zu analysieren. Ursache Objekte in JavaScript sind die gleichen wie assoziative Arrays. Sie werden Ihre Rechenzeit damit verschwenden, nach Ihren Werten mit einem Schlüssel zu suchen.

Verwenden Sie diese Option nur und nur, wenn Sie viele Argumente (5 oder mehr) haben, und es ist eine gute Möglichkeit, sie zu organisieren, und Sie erhalten die Möglichkeit, Argumente unabhängig von ihrer rechtmäßigen Platzierung zu übergeben.

2

Beim Erstellen und Übergeben von Objekten kann es zu Leistungseinbußen kommen, statt nur Argumente zu übergeben, aber ich bezweifle, dass dies der Engpass Ihrer Anwendung sein wird. Ich würde wegen der Lesbarkeit des Codes mit einem Objekt gehen.

Versucht es in 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

Verwandte Themen