1. JavaScript / Говнокод #15215

    +178

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 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);
    }

    Привет от Angular!

    Данный фрагмент присутствовал в официальном коде фреймворка с первой stable-версии и был бесчеловечно вырезан буквально пару месяцев назад (с 1.2.5 релиза).

    https://ajax.googleapis.com/ajax/libs/angularjs/1.2.4/angular.js

    Запостил: dhilt, 27 Февраля 2014

    Комментарии (16) RSS

    • показать все, что скрытоТвоя мать лежала подо мною.
      Ответить
    • Скорее всего apply было жутко тормозное в каком-то браузере. Пару месяцев назад этот браузер перестал поддерживаться, и этот костыль со свичом убрали.

      Не говно.
      Ответить
    • // Performance optimization: http://jsperf.com/apply-vs-call-vs-invoke
      так тут же прям по ссылке можно и глянуть почему так сделано наглядно графиком, и можно этот бенч самому запустить.
      в хроме показало лучший результат fn('a','b','c','d'); 119,815,378 ±5.00% Ops/sec (операций в секунду)
      Ответить
      • показать все, что скрытоСДЕЛАЙ ВДОЛЬ ПИДРИЛА
        Ответить
      • Testing in Firefox 27.0 on Windows XP Test 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 с лишним раз - где говно?
        Ответить
        • Опять какая-то пидота автоматом минуса хуячит?
          Ответить
        • > В 100 с лишним раз - где говно?

          в самом жабаскрипте? потому что программеру такие хаки реализовывать это очевидно ГК: сначала все обвешиваешь хаками, потому эти хаки еще и поддерживаешь, потом еще надо и проверять переодически нужны ли старые хаки, а может уже и какие новые хаки требуются?

          в языке/рантаймах которые продаются как mature and all это самое натуральное говно.
          Ответить
          • Ну ж.скрипт же не один рантайм, реализаций много. Говно в какой-то конкретной реализации, изза которой это было написано. Говно в языке в том, что нет возможности точно узнать где код выполняется, чтобы не загружать лишнюю херню, типа той, что в ОП.
            ЗЫ. Браузерные реализации еще, как правило, ничего, а вот всякое говно типа АСП / Явовский всторенный ж.скрипт и т.п. - вот там и не на такое можно нарваться.
            Ответить
          • >в самом жабаскрипте?
            Ну это да, но код-то тут причем? Он-то как раз адекватно решает проблему.

            Кстати, из-за того, что я не привык велосипедить и костылить, думаю, что путь в вебдев мне закрыт.
            Ответить
            • > не привык велосипедить и костылить
              > путь в вебдев мне закрыт
              кмк, вся разработка ПО - это балансирование между велосипедостроительством и костылями
              Ответить
              • Баланс в вебе почти полностью сдвинут в сторону костылей.
                Ответить
                • Не правда ваша. Веб все больше на хаках держится
                  Ответить
                  • >Веб все больше на хаках держится
                    >Баланс в вебе почти полностью сдвинут в сторону костылей.
                    Что я не так сказал?
                    Ответить
    • не гавно
      Ответить

    Добавить комментарий