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

    +152.5

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    function setTabs() {
           for(var i = 0; i < tabsNum; i++) {
               if(i === currentTab) {
                   $("#tabCont" + i).css("display","block");
               } else {
                   $("#tabCont" + i).css("display","none");
               };
           };
       };

    Нашел отличную функцию для скрытия/открытия табов

    Запостил: Rpsl, 01 Марта 2010

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

    • И правда отличная, спасибо.
      Ответить
    • Что не так-то? Код как код.
      Ответить
      • а зачем там фор и иф?

        function setTabs() {
        $('.tabtab').hide();
        $('#'+currentTab).show();
        }
        Ответить
        • показать все, что скрытоЭто уже другой вопрос.
          Короче, не говнокод.
          Ответить
        • показать все, что скрытоИ что? Меньше кода, но медленнее работает.
          Ответить
          • Вы не заметите разницу, если только у Вас не P-I или 486 :)
            Ответить
            • Ну это, знаете ли, не оправдание. сто раз по +0.02 - это уже 2 секунды
              Ответить
              • Это функция 'для скрытия/открытия табов', а не raytracer. Она не будет вызываться сто раз.
                Ответить
                • да и табов редко бывает более 5-10
                  Ответить
              • Если Вы будете кликать по табам хотя бы 10 раз в секунду, то тогда нужно учитывать скорость работы скрипта :)
                Ответить
              • Ну конечно, давайте все селекторы повешаем на классы. И табов может быть сотня и подгружаться они могут динамически. Но это, конечно, все условности. Минусуйте дальше, не обижаюсь.
                Ответить
                • Ну раз уж занялись оптимизацией, то зачем вообще jquery, document.getElementById('something').sty le уже отменили?
                  Ответить
                • 100 div'ов, 10 проходов

                  Sane: вариант Rpsl
                  Govno: искомое говно
                  Pure: искомое говно, без jQuery
                  Cached: Как-бы-делал-я
                  function cached(i) {
                   cached._cache = cached._cache || $('.t');
                   cached._cache.hide();
                   $(cached._cache[i]).show();
                  }


                  Chrome/Sane: 775
                  Chrome/Cached: 646
                  Chrome/Govno: 4627
                  Chrome/Pure: 949
                  FF36/Sane: 1726
                  FF36/Cached: 1100
                  FF36/Govno: ~8234 (выматерился на зависший скрипт)
                  FF36/Pure: 1003
                  IE8/Sane:2898
                  IE8/Cached: 2198
                  IE8/Govno: ~16000 (--"--"--)
                  IE8/Pure: 2651

                  Вердикт: говно.
                  Ответить
                  • ну я только условно сюда про кеширование не писал, на продакшене оно есть
                    Ответить
                  • Хо-хоу! Недолго пиздели лисоебы о том, что их браузер натягивает Хром.
                    Ответить
                  • Вспомнил анекдот.

                    На вступительном экзамене в технический ВУЗ абитуриенту задают вопрос:
                    - Если к кошке привязать консервную банку, то какая скорость должна быть у кошки, чтобы она не слышала звона банки?
                    Абитуриент: - Больше скорости звука.
                    На что ему ставят двойку и отправляют. Абитуриент спрашивает, что не так.
                    - Мы готовим практиков, а не теоретиков, кошка должна не двигаться.

                    Так и здесь, к чему эти тесты? Даже если время переключения в предложных вариантах будет отличаться на 0,2 сек, то дискомфорта вы не ощутите
                    Ответить
                  • Естественно, так будет быстрее, о чем и речь.
                    Ответить
                  • маша ела кашу )))
                    как хорошо в AS - watch ставишь, и оно работает. А в JS даже сеттер не повесить без изврата.
                    Ответить
    • нормальный код. единственное можно сначала все hide, а потом нужный show, чтобы без ветвления.
      Ответить
      • Вот-вот. Просто аффтар недокурил доку по jQuery, причём не то чтобы смертельно недокурил.
        Ответить
        • Я думаю тот день, когда он дойдет до jquery.tabs, будет для него моментом истины
          Ответить
          • Ради 3 табов подключать UI ??? Ололо
            Ответить
            • Не суди обо всём сайте по одной его мелкой функции. Если там, кроме табов, ничего нет - ясен пень, лучше написать свой обработчик.
              Ответить
      • Типа потому, что JavaScript и без того медленый, так уже не важно, как писать - ничего не спасет? :) Вообще, логичнее всего, нужно было просто хранить ссылку как на текущую закладку, так и на последнюю закрытую - и никаких циклов и условий не нужно. Говнокод, это же когда работает, но плохо, этот код работает, но работает плохо - не оптимально. А то, что он не оптимален на X% по сравнению с каким-то другим еще менее неоптимальным решением это как бы без разницы. Главное установить факт беременности, а процентноее соотношение уже роли не сыграет :)
        Ответить
        • Медленный язык программирования - это просто смешно. Медленными бывают только реализации.
          Ответить
          • Если язык програмирования весь построен на рефлекшене, он по определению не может быть быстрым... как бы хорошо вы ни написали реализацию.
            Ответить
            • однако гуглу это не мешает делать быстрые реализации жабаскрипта в своём браузере. такшто от реализации зависит дохера....
              Ответить
      • лучше чтобы они по дефолту были display:none; и писать либо айдишники либо классы семантичные... типа tab-main-1 ну и гдето хранить текущюю открытую табу... выбрал другую -> текущую закрыл а потом открыл новую.... и работать будет песец как шустро посравнению с темчто все тут наговнокодили в коментах
        Ответить
        • Именно. Вместо jQuery.hide/show намного предпочтительнее использовать что-то вроде jQuery.[add|remove]Class('hidden'). Для интереса, откройте исходник jQuery, и посмотрите, сколько там на hide/show идкт накладных расходов типа запоминания в дате элемента olddisplay (чтобы потом по show вернуть тот, что был) и прочее.
          Ответить

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