Вы можете определенно оптимизировать ваши селекторы для производительности.Одним из ключевых моментов является то, что парсеры CSS читают селекторы справа налево, тогда как движки селектора javascript (например, jQuery и т. Д.) Читают их слева направо.Хотя в принципе общие принципы одинаковы - вы хотите, чтобы каждая часть селектора соответствовала как можно меньшему количеству элементов, чтобы сократить узлы DOM, которые необходимо искать для определения соответствия.
Это означает, что, как и в javascript, выбор единственного голого идентификатора в CSS - это самый быстрый способ получить доступ к элементу.Выбор всего *
или выбор по атрибутам ([href*=foo]
) относятся к числу самых медленных.
Порядок чтения создает разницу между оптимизацией селекторов jQuery и селекторов CSS: вы не набираете скорость, начиная судостоверение личностиНапример, если вы напишите:
#mainContent ul li
В jQuery вы начинаете с поиска элемента с идентификатором mainContent, который очень быстр, а затем копаете его дочерние элементы.
В CSSтем не менее, вы начинаете со всех элементов li
, затем смотрите, есть ли у них предок ul
, а затем проверяете, находятся ли они внутри #mainContent
.Гораздо медленнее.
Возможный прирост скорости
Однако вы также должны знать, что CSS-разбор намного, намного быстрее, чем обход DOM из JavaScript - так что даже когда вы это делаетеИмея много сложных, «медленных» селекторов, вы вряд ли увидите огромный выигрыш в производительности, оптимизировав их.Вот хорошая статья об увеличении производительности: http://www.stevesouders.com/blog/2009/03/10/performance-impact-of-css-selectors/ - автор указывает, что он мог бы увеличить время рендеринга примерно на 20 мс, создав огромную, сложную таблицу стилей и документ (6000 элементов DOM и 2000 правил CSS).Поэтому для более «нормальной» страницы ваш выигрыш, вероятно, будет меньше 20 мс - вероятно, не стоит затраченных усилий.
Я считаю, что хорошо иметь в виду производительность селектора, пока вы пишете CSS, ноне позволяйте этому делать ваши таблицы стилей менее читабельными или обслуживаемыми.В большинстве случаев не стоит оптимизировать существующую таблицу стилей, если только вы не можете определить какой-то селектор, который действительно излишне медленный.
Вот еще несколько хороших чтений по этому вопросу: