#section vs section: nth-of-type (1) при выборе Css - PullRequest
0 голосов
/ 06 октября 2018

Мне сказали это, но я хотел подтвердить это.

Какой самый быстрый способ выбрать в CSS из HTML?

<style>
#example{}

section div:nth-of-type(1){}
</style>

<body>
<section id="section">
    <div id="example">          

    </div> 

    <div id="example2">

    </div>
</section>
</body>

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Есть два важных, но нелогичных принципа, о которых следует помнить, думая о производительности селектора:

  1. Механизм сопоставления правил разработан на основе предположения о том, что в нем будет гораздо больше элементов.быть сопоставленным с правилами для сопоставления, и что только несколько правил будут применяться к любому данному элементу.

  2. Механизм сопоставления правил не проходит полностьюпостроил дерево DOM из корня для каждого правила.Скорее, он просматривает список правил для каждого элемента , поскольку он анализируется и добавляется в DOM.

Из-за этого производительность селектора падает примерно на трикатегории.Если можно решить, соответствует ли правило какому-либо данному элементу, просматривая только сам элемент и его атрибуты, а не его содержимое или его связь с другими элементами в дереве, сопоставление будет очень быстрым.Селекторы #id, .class, tagname, [attr] и т. Д. Относятся к этой категории.Вторая наиболее эффективная категория - это когда решение может быть принято только на основе элемента и его родителей, таких как #foo bar или .foo > .bar.В худшем случае это занимает время, пропорциональное глубине элемента в дереве DOM, которая обычно не так велика.Все остальное медленнее, потому что это связано с более сложным обходом DOM, и потому что оно не было оптимизировано так много в реализации.

#example может быть сопоставлено, если смотреть только на сам элемент, которыйочень быстро.Но div:nth-of-type(1) требует обхода списка предыдущих братьев и сестер элемента, что неэффективно.

Поэтому, если вам сказали, что #example быстрее, чем div:nth-of-type(1) дляпоказан фрагмент HTML и CSS, тогда это было правильно.В таком маленьком документе это не будет большой проблемой, но в большом документе с большим количеством элементов <div> это может стать проблемой.

0 голосов
/ 06 октября 2018
  • Если вы хотите, чтобы определенный div имел стиль, используйте селектор идентификатора (например, #example)

  • ЕслиВы хотите, чтобы первый div в #container имел стиль, затем используйте #container div:first-of-type.

  • Если вы хотите каждые divэто первый потомок его родителя , у которого есть стиль, затем используйте div:first-of-type.

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