2012-12-19 7 views
5

Spesso mi sto ritrovando a passare molti parametri dalla funzione alla funzione. Sembra che questo:devo passare i parametri di funzione incapsulati in un oggetto o uno per uno se le prestazioni sono importanti in Javascript?

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

Mentre ho potuto vedere che la memorizzazione di questi in un oggetto specs avrebbe senso "visivamente" Sono curioso di sapere le implicazioni sulle prestazioni della creazione dell'oggetto, assinging tutte le coppie chiave/Val e passando l'oggetto in giro.

Domanda:
Se ogni ms conta, qual è il modo migliore e più strutturato per mischiare intorno ad un gran numero di parametri di funzione?

Grazie!

+0

che stai dicendo, lasciare le cose come stanno? – frequent

+0

ok. Suona bene. Grazie mille. – frequent

+0

benvenuto e +1, buona domanda. –

risposta

2

Penso che un buon ottimizzatore renderebbe insignificante questa micro-ottimizzazione. Sentiti libero di usare quello che meglio si adatta al tuo stile di codifica e alle tue abitudini di lettura del codice. Se preferisci un oggetto, perché è più compatto, vai avanti e usa un oggetto. Se preferisci spiegare esplicitamente gli argomenti, fallo.

1

Se passate argomenti incapsulati in un oggetto, ecco cosa succede:

In JavaScript, quando si recupera un valore da un oggetto che è lo stesso che si utilizza la clausola for per analizzare una matrice. Gli oggetti in JavaScript sono uguali agli array associativi. Quindi sprecherai il tuo tempo computazionale nella ricerca dei tuoi valori con una chiave.

Utilizzare questa opzione solo e solo se si dispone di molti argomenti (5 o più) ed è un buon modo per organizzarli, oltre a ottenere la possibilità di passare argomenti indipendentemente dal loro giusto posizionamento.

2

È possibile che si verifichi un sovraccarico delle prestazioni durante la creazione e il passaggio dell'oggetto anziché solo il passaggio degli argomenti, ma dubito che questo sarà il collo di bottiglia dell'applicazione. Vorrei andare con un oggetto a causa della leggibilità del codice.

Provato 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

Problemi correlati