Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (7)

Наибольший вклад в теги

Все теги (15)

Лучшие ответы пользователя

Все ответы (17)
  • JQuery parents().get(2) против parent().parent().parent()?

    Smileek
    @Smileek
    Спасибо, веселенькая задачка получилась.:)
    Тестим вот на этом:
    <div id="i1"><div id="i2"><div id="i3"><div id="i4"></div></div></div></div>
    <div id="info"></div>

    Вот так:
    var x, dt, dt2;
    var iter = 100000;
    dt = new Date();
    for (var i = 0; i < iter; i++)
    {
        x = $("#i4").parent().parent();
    }
    dt2 = new Date();
    $("#info").text(dt2 - dt);
    				
    dt = new Date();
    for (var i = 0; i < iter; i++)
    {
        x = $("#i4").parents().get(2);
    }
    dt2 = new Date();
    $("#info").text($("#info").text() + ":" + (dt2 - dt));
    

    На заданном примере выигрывает parents().get(2). 3398:2910
    Далее делаем 12 вложенных элементов и прогоняем пример из комментария — пять parent()-ов против parents().get(5): с огромным перевесом выигрывает get(5) — 5374:3954.
    А вот get(3) проигрывает parent().parent().parent() — 3406:3880.

    Получается, что выбрать все 12 элементов и в них найти третий, дольше, чем три раза прыгнуть вверх по дереву.

    Наконец, вернемся к первому варианту с четырьмя элементами, и попробуем воспользоваться полученным родителем.
    var x, dt, dt2;
    var iter = 10000; /* <-- В 10 раз уменьшим, а то зависнем */
    dt = new Date();
    for (var i = 0; i < iter; i++)
    {
       $("#i4").text($("#i4").parent().parent().attr("id")); /* <-- Запишем id родителя в текст потомка */
    }
    dt2 = new Date();
    $("#info").text(dt2 - dt);
    				
    dt = new Date();
    for (var i = 0; i < iter; i++)
    {
       $("#i4").text($("#i4").parents().get(2).attr("id"));  /* <-- Попробуем сделать то же самое */
    }
    dt2 = new Date();
    $("#info").text($("#info").text() + " " + (dt2 - dt));
    

    И вот тут нас ждет сюрприз: $("#i4").parents().get(2).attr is not a function
    arr.get(i), по сути, то же, что и arr[i], то есть мы получим просто Object.
    Для того, чтобы воспользоваться jQuery-функциями, придется обернуть его в денежный знак:
    $("#i4").text( $( $("#i4").parents().get(2) ).attr(«id»));
    От этого мы и потеряем в производительности: 2665:2973.

    Мораль:
    1) Всегда найдутся варианты использования, которые лучше для одного варианта и хуже для другого.
    2) Эффект от производительности или ее потери будет только на больших числах — в самом первом примере мы выиграли 0,4 секунды за 100000 (!) итераций.
    3) Поэтому поступайте, как велит эстет внутри Вас: мне, скорее всего, в реальном примере было бы удобнее получить jQuery-объект и дважды воспользоваться parent()-ом. С другой стороны, восемь раз я бы писать parent() не стал: религия не позволяет.
    Ответ написан
    2 комментария
  • Красивая вёрстка <figure>

    Smileek
    @Smileek
    figure {width:1%; display:table}

    И ведь решается на чистом CSS! :)
    jsfiddle.net/XML6b/
    Ответ написан
    5 комментариев
  • Как запретить автообновление конкретного плагина Firefox?

    Smileek
    @Smileek
    Нужно проделать следующее:
    — Набрать в адресной строке about:config
    — Правый клик -> Создать -> Логическое (New -> Boolean)
    — Присвоить новой переменной имя: extensions.{GUID}.update.enabled
    — И значение: false

    Осталось выяснить откуда взять GUID.
    Ленивый вариант: Extension Manager Extended, показывает GUID в свойствах плагина.
    Ручной вариант: в config'е задать фильтр «extensions.{» и обнаружить плагин по описанию.

    Источник

    З.Ы. А можно поинтересоваться, почему такая аллергия на обновления? Шустрее ведь работают следующие версии.
    Ответ написан
    5 комментариев
  • Сайт выбора фильмов?

    Smileek
    @Smileek
    Мы обратились в передачу «жди меня» и нашли ваш сайт.

    Google: лучшие комедии "Как приручить дракона" "Выход через сувенирную лавку" inurl:baza
    Ответ написан
    2 комментария
  • Сколько нужно кармы, чтобы голосовать за комментарии?

    Smileek
    @Smileek
    Ссылочка
    Правда, не совсем коррелирует с голосованием при карме == 1.
    Видимо, надо ориентироваться на информацию в левом верхнем углу — там написано, сколько осталось голосов. Информация основывается на активности за последние сутки.
    Ответ написан
    Комментировать