- 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);
}
Не говно.
так тут же прям по ссылке можно и глянуть почему так сделано наглядно графиком, и можно этот бенч самому запустить.
в хроме показало лучший результат fn('a','b','c','d'); 119,815,378 ±5.00% Ops/sec (операций в секунду)
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 с лишним раз - где говно?
в самом жабаскрипте? потому что программеру такие хаки реализовывать это очевидно ГК: сначала все обвешиваешь хаками, потому эти хаки еще и поддерживаешь, потом еще надо и проверять переодически нужны ли старые хаки, а может уже и какие новые хаки требуются?
в языке/рантаймах которые продаются как mature and all это самое натуральное говно.
ЗЫ. Браузерные реализации еще, как правило, ничего, а вот всякое говно типа АСП / Явовский всторенный ж.скрипт и т.п. - вот там и не на такое можно нарваться.
Ну это да, но код-то тут причем? Он-то как раз адекватно решает проблему.
Кстати, из-за того, что я не привык велосипедить и костылить, думаю, что путь в вебдев мне закрыт.
> путь в вебдев мне закрыт
кмк, вся разработка ПО - это балансирование между велосипедостроительством и костылями
>Баланс в вебе почти полностью сдвинут в сторону костылей.
Что я не так сказал?