Pull to refresh

Comments 20

Что-то он не очень то быстрый. Он быстрее в новых браузерах, поддерживающих selector api, а в тех, что не поддерживает, он медленнее jQuery 1.2.6.
В браузерах, поддерживающих Selectors API используется встроенный метод querySelectorAll, и Sizzle тут не играет никакой роли, даже снижает производительность конструкцией:
try {
    return makeArray( context.querySelectorAll(query), extra );
} catch(e){}

Которую пришлось ввести из-за того, что Internet Explorer 8 RC1 выдает сообщение об ошибке, при попытке использовать CSS3-селекторы, только непонятно для чего еще StaticDOMNodeList приводить к Array.
Немного не так сформулировал :-) перефразирую:
Если поиск идет через Selectors API, используется встроенный метод querySelectorAll, и Sizzle тут не играет никакой роли...

И try {} catch(e) {} еще используется, чтобы в случае нестандартного селектора, продолжить поиск средствами Sizzle, т.е. поддержка браузером Selectors API тоже не будет играть никакой роли.
UFO just landed and posted this here
Хм… проверил, querySelectorAll в новых версиях Chrome и Safari стали возвращать просто NodeList, а Opera 10a и IE8RC1 так и возвращают по прежнему «StaticNodeList»
…the collection (being static) will not be updated when the element tree changes.

теперь понятно для чего все к Array приводить, похоже стандартов даже в новейших возможностях нам не увидеть :-)
Последние билды Sizzle неплохи. Быстрее jQ1.2.6 точно :)
Я скачал отсюда и протестировал, там есть папка с тестами. Sizzle точно медленнее в опере 9.64 и ИЕ6 и быстрее в опере 10а. Я думаю не нужно говорить, что появилось в новой опере что заставило работать Sizzle быстрее.
Когда вы смотрите тесты в Slick Speed, там нет не стандартных селекторов (потому что не все тестируемые библиотеки их поддерживают), все примеры соответствуют синтаксису CSS, а значит в браузерах Opera 10, Safari 3.2, Google Chrome 2, IE8, Firefox 3.1 вы смотрите не производительность движка селекторов Sizzle, YASS, Pappy или еще какого-то, а производительность браузера при работе со стандартным для него методом querySelectorAll, в который при возможности (когда селектор стандартный или соответствует синтаксису CSS2.1, как в IE8RC1) эти библиотеки просто передают параметры напрямую, т.е., если отбросить условия, в простейшем случае это выглядело бы так:
function Sizzle(selector) {
     var result;
     if(document.querySelectorAll) {
         result = document.querySelectorAll(selector);
     }
     else {
        // тут алгоритм поиска для браузеров,
        // не поддерживающих querySelectorAll
     }
     return result;
}
Поэтому не позволяйте себя запутать красивыми диаграмками, иллюстрирующими, как выросла производительность в новых браузерах. Реальную скорость движка можно увидеть только в старых браузер, либо в сравнение не стандартных селекторов, если такие есть в нескольких библиотеках.
Вы мне просто мозг взрываете своим уже третьим комментарием, полным технических подробностей и напрочь лишенных смысла.

> Реальную скорость движка можно увидеть только в старых браузер
Как будто я не тоже самое сказал в одну строчку своим первым комментарием.
Звените :-) мне показалось, что вы не правильно понимаете, почему возрастает производительность в новых браузерах, и какое к этому отношение имеют библиотеки типа Sizzle.
Я проверял не на тестах, а на своём коде.

У меня достаточно специфичный код — например, львиная доля выборок идёт в контексте конкретного элемента, что играет свою роль.
Писалось с бодуна :)
поменял на Caught. спасибо :)
Я что-то не понимаю.
«In addition to the CSS 3 Selectors Sizzle supports the following additional selectors or conventions.
# :contains(TEXT): Finds all elements whose textual context contains the word ‘TEXT’ (case sensitive).
# :header: Finds all elements that are a header element (h1, h2, h3, h4, h5, h6).
# :parent: Finds all elements that contains another element.»

Это однозначно есть в обычном jquery без доп. библиотек. Часть других перечисленных на странице Sizzle тоже есть в самом jquery. Вообще с первого взгляда не нашел что-то радикально нового.

С функциями сложнее, но раздел Filtering тоже показался каким-то странным. У jquery есть родной метод filter. И как-то сложно придумать зачем его нужно наращивать чем-то еще.

Sizzle — это новый движок селекторов, который и используется в jQ 1.3.x.

Основное отличие от прошлого — Sizzle более расширяем и может использоваться отдеьно от jQ.

И, кстати, быстрее ветки jQ 1.2.x.
Кстати, разработчики Prototype предполпгпют перейти на Sizzle в следующем мажорном релизе.
Хотелось уточнить по поводу авторства. Здесь [http://github.com/jeresig/sizzle/tree/master] в файле LICENSE копирайт от J. Resig, а в самом файле (sizzle.js) другая строка «Copyright 2009, The Dojo Foundation»…
Джон решил перевести свой проект Sizzle под эгиду Dojo Foundation.

Сейчас он скорее maintainer проекта.

Это позволило использовать Sizzle в Dojo, кроме того, многие другие авторы задумались над встраиванием Sizzle.
Sign up to leave a comment.

Articles