- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
// Performance optimization: http://jsperf.com/apply-vs-call-vs-invoke
switch (self ? -1 : args.length) {
case 0: return fn();
case 1: return fn(args[0]);
case 2: return fn(args[0], args[1]);
case 3: return fn(args[0], args[1], args[2]);
case 4: return fn(args[0], args[1], args[2], args[3]);
case 5: return fn(args[0], args[1], args[2], args[3], args[4]);
case 6: return fn(args[0], args[1], args[2], args[3], args[4], args[5]);
case 7: return fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
case 8: return fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
case 9: return fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]);
case 10: return fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]);
default: return fn.apply(self, args);
}
Konardino 27.02.2014 17:14 # −21
bormand 27.02.2014 17:48 # +5
Не говно.
Lowezar 27.02.2014 18:37 # +2
guest 28.02.2014 16:53 # −2
Vasiliy 27.02.2014 20:11 # +7
так тут же прям по ссылке можно и глянуть почему так сделано наглядно графиком, и можно этот бенч самому запустить.
в хроме показало лучший результат fn('a','b','c','d'); 119,815,378 ±5.00% Ops/sec (операций в секунду)
guest 28.02.2014 05:14 # −10
guest 28.02.2014 16:58 # 0
apply
fn.apply(obj, ['a','b','c','d']);
901,068 ±29.01%99% slower
call
fn.call(obj, 'a', 'b', 'c', 'd');
3,863,132 ±13.75%97% slower
invoke
obj.fn = fn;
obj.fn('a','b','c','d');
delete obj.fn;
1,858,252 ±3.46%98% slower
apply (undef)
fn.apply(undefined, ['a','b','c','d']);
1,053,556 ±12.22%99% slower
call (undef)
fn.call(undefined, 'a', 'b', 'c', 'd');
3,855,823 ±12.00%97% slower
invoke (undef)
fn('a','b','c','d');
111,109,258 ±2.42%fastest
В прыщелисе тоже.
В 100 с лишним раз - где говно?
guest 28.02.2014 20:20 # −2
Dummy00001 01.03.2014 18:49 # +4
в самом жабаскрипте? потому что программеру такие хаки реализовывать это очевидно ГК: сначала все обвешиваешь хаками, потому эти хаки еще и поддерживаешь, потом еще надо и проверять переодически нужны ли старые хаки, а может уже и какие новые хаки требуются?
в языке/рантаймах которые продаются как mature and all это самое натуральное говно.
wvxvw 01.03.2014 20:57 # +2
ЗЫ. Браузерные реализации еще, как правило, ничего, а вот всякое говно типа АСП / Явовский всторенный ж.скрипт и т.п. - вот там и не на такое можно нарваться.
guest 02.03.2014 03:16 # 0
Ну это да, но код-то тут причем? Он-то как раз адекватно решает проблему.
Кстати, из-за того, что я не привык велосипедить и костылить, думаю, что путь в вебдев мне закрыт.
roman-kashitsyn 02.03.2014 09:52 # +4
> путь в вебдев мне закрыт
кмк, вся разработка ПО - это балансирование между велосипедостроительством и костылями
guest 02.03.2014 19:16 # 0
Vasiliy 02.03.2014 20:59 # 0
guest 02.03.2014 22:26 # +1
>Баланс в вебе почти полностью сдвинут в сторону костылей.
Что я не так сказал?
guest 11.03.2014 12:45 # 0