2012-12-19 9 views
5

Często znajduję się przekazywanie wielu parametrów z funkcji do funkcji. Wygląda następująco:Czy powinienem przekazywać parametry funkcji enkapsulowane w obiekcie lub pojedynczo, jeśli wydajność ma znaczenie w JavaScript?

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

Chociaż widziałem, że przechowywanie ich w obiekcie specs miałoby sensu „wizualnie” Jestem ciekaw, implikacje wydajności tworzenia obiektu, assinging wszystkie pary klucz/VAL i przekazanie obiektu dookoła.

Pytanie:
jeśli każdy liczy ms, co jest najlepszym i najbardziej uporządkowany sposób shuffle wokół dużej liczby parametrów funkcji?

Dzięki!

+0

mówisz, zostaw to jak to jest? – frequent

+0

ok. Brzmi dobrze. Dzięki, do tej pory. – frequent

+0

Witaj, a +1, dobre pytanie. –

Odpowiedz

2

Myślę, że dobry optymalizator sprawiłby, że ta mikrooptymalizacja byłaby nieistotna. Zachęcamy do korzystania z tego, który pasuje do Twojego stylu kodowania i nawyków czytania kodu lepiej. Jeśli wolisz obiekt, ponieważ jest on bardziej zwarty, używaj obiektu. Jeśli wolisz wyraźnie wypowiadać argumenty, zrób to.

1

Jeśli przekazywać argumenty zamknięty w obiekcie, oto co się dzieje:

W JavaScript, podczas pobierania wartości z obiektu jest taka sama, jak używasz klauzuli FOR do analizowania tablicę. Przyczyna Obiekty w JavaScript są takie same jak tablice asocjacyjne. Więc zmarnujesz swój czas obliczeniowy na wyszukiwanie wartości za pomocą klucza.

Użyj tej opcji i tylko wtedy, gdy masz dużo argumentów (5 lub więcej) i jest to dobry sposób na ich uporządkowanie, a ponadto zyskasz możliwość przekazywania argumentów niezależnie od ich prawowitego miejsca.

2

Podczas tworzenia i przekazywania obiektu może występować pewne obciążenie wydajnościowe, a nie tylko przekazywanie argumentów, ale wątpię, aby to było wąskie gardło aplikacji. Poszedłem z obiektem ze względu na czytelność kodu.

Wypróbowałem w 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

Powiązane problemy