Оптимизация CSS, вложенные селекторы и индексация браузером имен ID / class
при рендеринге веб-страниц и применении стилей сделайте браузеры индексировать идентификаторы и имена классов для эффективного поиска, или он пересекает весь DOM сверху каждый раз, когда идентификатор или имя класса указывается для достижения правильного элемента.
мне интересно по причинам оптимизации, и стоит ли давать подсказки браузера (более длинные селекторы), где находится объект определенного идентификатора. Т. е.
#container #one-of-many-container-siblings #my-id
вместо:
#my-id
будет ли прежний выход лучшая производительность, если DOM довольно большой?
4 ответов
это на самом деле работает в противоположную сторону от того, что вы думаете.
помните, что браузеры анализируют селекторы CSS справа налево.
Это:
#container #one-of-many-container-siblings #my-id
сделает больше шагов, чтобы соответствовать, чем это:
#my-id
см.:http://www.css-101.org/descendant-selector/go_fetch_yourself.php
учитывая вопрос, который вы только что задали, я рекомендую вам прочитать это статья:
http://css-tricks.com/efficiently-rendering-css/
это поможет вам написать более эффективные селекторы:
#main-navigation { } /* ID (Fastest) */
body.home #page-wrap { } /* ID */
.main-navigation { } /* Class */
ul li a.current { } /* Class *
ul { } /* Tag */
ul li a { } /* Tag */
* { } /* Universal (Slowest) */
#content [title='home'] /* Universal */
определение идентификатора в HTML / CSS является единственным экземпляром элемента. Предполагая, что вы следуете этому правилу, все, что вам нужно, это идентификатор этого элемента. Браузер будет искать и находить этот элемент и останавливаться.
с вашим "намеком", он будет сначала искать первый элемент, затем второй, затем третий, прежде чем остановиться. Это, как вы, вероятно, видите, более неэффективно.
при работе с классами, это может быть немного более сложным и нечетко, но общее правило-чем меньше селекторов, тем лучше. Если вы обнаружите, что делаете три, четыре или пять селекторов, возможно, стоит подумать о небольшом рефакторинге, таком как добавление классов или идентификаторов в стратегических местах или даже не быть настолько конкретным с вашими селекторами CSS.
использование более короткой версии всегда будет быстрее, потому что выполняется меньше проверок, однако я не знаю, почему нужно оптимизировать CSS на странице.