Проще / быстрее оценить CSS селекторы LTR или RTL?
Учитывая селектор CSS, как
ul > li a
Будет ли легче / быстрее оценить его слева направо или справа налево? (Я понимаю, что ответы на "легко" и "быстрее" могут быть разными. Я хочу ответ на оба вопроса). Я собираюсь встать на один из этих путей, и я не хочу идти на полпути туда, а потом понять, что я выбрал неправильный путь:)
LTR: перебрать все элементы в документе, выбрать те, которые ul
затем проверьте всех своих детей на li
, а затем посмотрите на их потомков для a
,
RTL: переберите все элементы в документе, найдите все a
, отфильтруйте те, которые не имеют предка, который является li
если у него есть li
предок, проверьте, является ли его родитель ul
если нет, отбрось a
,
Кроме того, на самом деле нет другого способа сделать это, чем итерации по всем элементам?
Я думаю в контексте поиска элементов, как это делает jQuery, а не в контексте применения стилей.
2 ответа
Браузеры и механизм выбора Sizzle JS (что используется в jQuery и других платформах) используют сопоставление справа налево.
Справа налево работает как наиболее оптимальное решение для перемещения в большинстве ситуаций.
Sizzle оптимизирует селекторы, которые начинаются с идентификатора. Сначала он разрешает элемент с идентификатором. Затем он использует это как контекст для дальнейшего обхода.
Так что если у вас есть селектор
#myID > ul a
Sizzle сначала найдет элемент с #myID, предполагая, что в этом случае слева направо более оптимально.
Это один из тех вопросов, которые повторяются на каждом форуме по дизайну и программированию. Типичным примером является также тот, который приведен оригинальным постером в этой теме:
ul> li a
если вы пройдете через ltr, вы найдете все UL, а затем все lis этих uls и затем все теги в этих lis. Учтите, что разметка может выглядеть так:
<ul>
<li>
<a href="#">Click Here</a>
</li>
</ul>
или это может выглядеть так:
<ul>
<li>
<span>
<p>
<div class="someuselessclass">
<span class="JunkClass">
<a href="#">Click Here</a>
</span>
</div>
</p>
</span>
</li>
</ul>
Дело в том, что вы не знаете, как далеко придется пройти, и в тысячах таких LI могут быть тысячи таких ссылок. Сдается мне, что, исходя из своего опыта, разработчики браузеров пришли к выводу, что синтаксический анализ справа налево происходит быстрее.
Это мои два цента.