Производительность селектора класса jQuery (в замешательстве) - PullRequest
10 голосов
/ 30 мая 2011

Так что $('table.selectable td.capable input:text') предпочтительнее $('table.selectable td input:text')? Другими словами, ускоряет или замедляет ли указание класса выделение (при условии, что в этом сценарии это не обязательно)?

Ответы [ 3 ]

3 голосов
/ 30 мая 2011

Я не проверял реализацию Sizzle, но в лучшем случае td соответствовал бы чему-то вроде getElementsByTagName () и .capable что-то вроде getElementsByClassName () , если доступно.Таким образом, оба были бы сопоставимы по скорости.

Однако, насколько я знаю, не существует метода getElementsByTagNameAndClassName(), поэтому для разрешения td.capable, вероятно, потребуется дополнительный проход фильтрации после вызова DOM.Поэтому я склонен думать, что это будет медленнее.

Естественно, эталонный тест скажет наверняка.

3 голосов
/ 30 мая 2011

Итак, я провел несколько сравнительных тестов с firebug, и в конкретном примере, который я перечислил в вопросе, последний (без спецификатора класса td) работает быстрее.

0 голосов
/ 30 мая 2011

Зависит от контекста.

Как правило, чем больше проверок необходимо выполнить, тем медленнее они будут выполняться, поскольку каждая из них требует времени. Дело в том, что они, очевидно, не обязательно одинаковые результаты. Один является подмножеством другого.

По большей части стремитесь к тому, чтобы иметь минимальное количество селекторов, требуемых для целевого набора, который вам требуется. Также имейте в виду, что некоторые селекторы работают намного лучше (из-за доступности метода браузера), чем другие. Селекторы идентификаторов #id и селекторы тегов в современных браузерах намного быстрее, чем поиск по классам .class, для которого требуется итеративный анализ строки параметра .className или поиск на основе атрибутов, который обычно одинаков.

Если сомневаетесь, выполните метрики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...