Пользователь
0,0
рейтинг
21 февраля 2009 в 12:22

Разработка → Выпуск: jQuery 1.3.2 перевод

20 февраля 2009 вышел jQuery 1.3.2. Вы можете увидеть полный список изменений и исправлений в баг трэкере.

От переводчика: Этот выпуск не вполне совместим с прежними версиями, не ставьте на production без тестирования!

Загрузка


jQuery Minified, jQuery Regular.

Список изменений


Элементы возвращаются в порядке расположения в документе

Изменение коснулось движка селекторов jQuery, который теперь пересортировывает возвращаемый набор результатов в порядке их расположения в документе, вместо порядка их отбора. Это изменение выполнено для поддержки спецификации Selectors API (которую jQuery использует в тех браузерах, которые её поддерживают).

.live() теперь может предотвращать всплытие

Теперь можно вызывать e.stopPropagation() или 'return false;' внутри обработчика события на лету live(), и тем самым предотвращать всплытие события. Это означает, что теперь Вы можете назначать «обработчики на лету» вложенно, и ранее выполняемые обработчики смогут предотвращать вызов внешних обработчиков.
К примеру:
<ul>
  <li><b>Google</b></li>
  <li><b>Yahoo</b></li>
</ul>
<script>
  $("li").live("click", function(){
   $(this).addClass("active");
  });
  $("li b").live("click", function(){
   $(this).addClass("active");
   return false;
  });
</script>

* This source code was highlighted with Source Code Highlighter.


:visible, :hidden ускорены

Механизм отбора :visible, :hidden полностью изменился. Вместо проверки display, visibility, type проверяются атрибуты offsetWidth/offsetHeight. Теперь видимый элемент внутри невидимого — также считается невидимым! Скорость работы возросла.

image

Скорость работы .height(), .width() резко возросла

Скорость вычисления размеров (width, height, +outer, +inner) резко выросла.

image

Ускорение движка селекторов под IE

Движок селекторов Sizzle оптимизирован под MSIE, что незначительно увеличило его производительность даже под MSIE6.

image

Кстати, теперь также появилась документация по Sizzle, которая может быть интересна, если вы планируете расширить или интегрировать её функционал.

.appendTo() и др. теперь возвращают вставленные элементы

Небольшое исправление. Методы appendTo, prependTo, insertBefore, insertAfter, and replaceAll теперь возвращают не исходное множество, а вставленное.

Небольшой пример:
<div></div>
<div></div>
<script>
$("<p/>")
  .appendTo("div")
  .addClass("test");
</script>

* This source code was highlighted with Source Code Highlighter.

В jQuery 1.3.1 и ранее выдаст:
<div><p class="test"></p></div>
<div><p></p></div>

* This source code was highlighted with Source Code Highlighter.

В jQuery 1.3.2 выдаст:
<div><p class="test"></p></div>
<div><p class="test"></p></div>


* This source code was highlighted with Source Code Highlighter.

Также эти методы теперь влияют на поведение end(), так как возвращаемый результат помещается в стек jQuery.

Выжимка из остального

jQuery теперь официально поддерживает IE8 RC1 и Chrome 2.
Перевод: jQuery team
Акжан @akzhan
карма
25,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (45)

  • +11
    Я смотрю, главной фишкой этой версии стал упор на клиент сайд перформанс.
    Это очень круто. И графики весьма «красноречивые».
    Прям настроение поднялось.
    • +2
      Смущает меня лишь несовместимость по поведению со всеми старыми версиями :)
      • +1
        я сомневаюсь что это очень серьёзная проблема, потому что обычно этот подход не использовался на нескольких элементах.
        например надо было создать какой-то всплывающий мессадж бокс — создавался один див, а не целая пачка и аппендился обычно к body, тут проблем возникать не должно.
      • 0
        да сейчас мало где обеспечивается совместимость :(
        то ли дело было раньше :)

        лучше иметь на сервере все версии фреймворков и в проекте жёстко прописывать, какая версия используется
    • 0
      если учесть, что по производительности Sizzle в разы проигрывал Peppy/YASS (даже без кэширования), то это было вполне ожидаемо.

      Только вот сортировка элементов по порядку их наличия в документе явно ухудшила производительность.
      • +2
        кто-нибудь из трех отминусовавших может аргументировать свой минус? Или просто «фу, да ты плюнул в John'а — вот тебе»?
        • +1
          Кстати, спасибо а упоминание про Peppy/yass, гляну :)
  • –4
    Спасибо
  • +1
    Прекрасная новость! Вот только после обновления перестал работать jQuery UI модуль resizable. Обновление модуля не помогло.
    • +2
      Я пока тоже не обновился, жду новую версию jQuery UI :)
    • 0
      Странно, только сейчас обновился, проверил resizable, работает.
  • 0
    немного рихтанул «перевод», чтобы было не конспектом, а ближе к переводу.
    • 0
      рейтинг у статьи падает, мистика :)
  • 0
    Увы, с совместимостью теперь проблемы будут. И с собственным кодом, и с плагинами…
  • 0
    Исправления очень полезные, особенно порадовало ускорение по селекторам в IE6 и правильное поведение :hidden и :visible.
    Жду выхода jQuery UI 1.7, чтобы наконец обновить всё скопом :)
  • 0
    Как раз купил книгу по jQuery :) буду изучать
    • 0
      простите, а какую книгу вы купили?
      • +1
        Вот эту
        • 0
          спасибо
          радует, что переводят и издают книги такого плана
        • 0
          хорошая книжка
          • 0
            Кстати, а то, что она уже немного отстает от текущей версии jQuery, это на качество данной книги не влияет?
            • 0
              Да, вроде, нет. Об изменениях можно кратко почитать на сайте, не так уж сильно она и отстает.
  • 0
    800x faster HTML load on large HTML chunks

    Офигеть ускорили… :-O

    Такими темпами JS по производительности переплюнет флэш в скором времени.
    • 0
      А может просто раньше было о-о-о-очень медленно? :) Ведь все относительно :)
    • 0
      А как, простите, узнать скорость HTML load on large HTML chunks у Flash? :)
      • 0
        Никак. Я про оптимизации и ускорения в целом.

        зы. А вы думаете, флеш не умеет HTML грузить? :)
  • НЛО прилетело и опубликовало эту надпись здесь
    • +1
      Кстати, подскажите, есть ли более логичный способ получения видимости элемента, чем .is(':visible'). Иногда проверить видимость нужно, а ничего умнее чем применить селектор не могу придумать.
      • +1
        через классы вверх по дереву. Эту проблему уже освещали на Хабре
        habrahabr.ru/blogs/javascript/21177/
        • 0
          И всем возрадовавшимся «заоптимизацированным» :visible/:hidden думаю будет полезно ознакомиться с этой ссылкой ))
          • 0
            Практически пофигу. Подобные проверки обычно не выполняются в момент перестроения дерева.
      • 0
        как это делает сам jQuery — просто проверить равенство нулю для offsetWidth/offsetHeight.
  • 0
    Господа, такой вопрос.
    На работе срочно проектик делаю с jQuery (1.3.1). у меня проблема: в IE7 xml не парсится.
    Просидев полдня в firebug и с кучей alert-ов, видел, что после .ajax(.get,.post) Xml приходит как стринг, но потом не «превращается» в объект.

    Гугл потом сказала, что это чуть ле не официальныя фича. нужно писать аля:

    $.ajax({
    url: «data.xml»,
    dataType: ($.browser.msie)? «text»: «xml»,
    success: function(data){
    var xml;
    if (typeof data == «string») {
    xml = new ActiveXObject(«Microsoft.XMLDOM»);
    xml.async = false;
    xml.loadXML(data);
    } else {
    xml = data;
    }
    // Returned data available in object «xml»
    }
    });

    Это действительно так? :-)
    • –1
      Давно перешёл на .getJSON(), поэтому не в курсе, какие могут быть проблемы с XML.
      По идее в $.ajax должен быть атрибут dataType.

      И никто не мешает создать плагин $.getXML, если в jQuery есть недоработки, в чём я сомневаюсь.

      Возможно, ответ приходит с некорректным content-type?
      • 0
        1) действительно, сервер возвращает абы какой content-type
        2) атрибут xml в методы ajax get post вставлял. нужного эффекта ноль
        3) действительно, один из рутей решения заюзать xml2json

        но я думал, что траблы «ie+xml» решены в jquer, а выясняется что — нет :-)
        • 0
          1) — это проблема не jQ, а IE. Объясните серверу, что xml — это application/xml или text/xml, и всё будет работать как надо.
  • 0
    С плагинами метаданных новая версия jQuery абсолютно несовместима.
    • 0
      jquery.metadata? пишите баг репорт автору плагина.
  • 0
    Странно… что теперь значит надо забыть CSS-свойство «visibility»?
    $('#…').css('visibility', 'hidden').is(':visible') // → true
    $('#…').is(':hidden') // → false
    разве это нормально?
    Что-то они перемудрили… производительность конечно хорошо, но функция то работает не правильно.
    • 0
      Можно подробнее — в каких браузерах и тестовый код для воспроизведения.

      Закоммичу баг.
      • 0
        <html>
        <head>
        <script src="jquery-1.3.2.js"></script>
        <script>
        $(function() {
        	$('#test').css('visibility', 'hidden');
        	var visible = $('#test').is(':visible'); // → true
        	var hidden = $('#test').is(':hidden');   // → false
        	alert([visible, hidden]);
        });
        </script>
        </head>
        <body>
        	<div id="test">test</div>
        </body>
        </html>

        Во всех браузерах, потому что visibility не влияет на offsetWidth/offsetHeight
  • 0
    Кстати, jQuery 1.3.2 имеет ещё кучу ускорений, не описанных в материале.

    Очень много изменений видно по баг трэкеру. Например, ускорение метода load.
  • 0
    Один скрипт отказался работать в Google Chrome 1.0.154.48 и Apple Safari 3.2.2 (525.28.1), пришлось откатиться назад до 1.3.1.
  • 0
    Интересно, а чем они perfomance мерили??? такие красивые картинки получили, куль

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.