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

    +153

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    /* Грязный хак для слайдера */
    switch (id){
        case '1':
            num = 2;
            break;
        case '2':
            num = 1;
            break;
        default:
            num = 0;
            break;
    }

    Запостил: lynx1983, 01 Августа 2013

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

    • num=([null,2,1])[id]||0
      fixed.
      Ответить
      • в этом варианте массив создаётся, нафиг надо?
        Ответить
        • Тогда еще более грязный хак:
          num = id == 1 && 2 || id == 2 && 1 || 0
          Ответить
          • Самое интересное, необходимости в грязном хаке не было никакой. Банальное непонимание документации. Сие было выпилино полностью
            Ответить
            • > Банальное непонимание документации.
              А зачем эта штука юзалась, если не секрет?
              Ответить
              • Чувак не в том месте callback указал и получал не правильный индекс текущего слайда, этим он его менял на нужный, видимо после долгих проб и ошибок
                Ответить
          • num = max(0, 3 - min(3, id));
            Ответить
        • А чем массив не угодил?
          Ответить
          • память жрёт
            Ответить
            • Собственно, а на чем мы экономим? 8 байт на 2 числа в массиве - это называется "жрет"? Предложите свой вариант.
              Ответить
            • Это вызывается поди пару раз в минуту, или по клику, или вообще при инициализации... По сравнению с объемом картинок, которые переключает слайдер, этот массив ничтожен... Поэтому, имхо, экономия на спичках ;)
              Ответить
            • Я думаю, тут памяти больше отожрёт парсер свича, по сравнению с массивом. Ну и на передачу данных тоже буфер больше потребуется.
              Ответить
        • Специально померял производительность говнокода-VS-кода с массивом.
          На 50К вызовов выигрыш switch составляет ~15%, что в натуральных величинах = switch(47ms), array(55ms).
          Имхо этим можно пожертвовать для улучшения читаемости и уменьшения кода.
          Ответить
          • ложи на jsperf
            Ответить
            • http://jsperf.com/govnokod1


              Во всех браузерах код с switch работает быстрее:
              FF 23: 20%
              Chrome 29: 1%
              IE9: 26%
              Опять же, ИМХО, оно того не стоит, чтобы заморачиваться...
              Ответить
              • Похоже что так. Добавил джве ревизии, проверил на 10-ой лисе - разница около 10%. Маловато, да.
                Но в остальных (старом хроме, и новых браузерах) - несколько раз.
                Ответить
              • Но если вынести массив в константу, то иногда он оказывается быстрее
                Ответить

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