У браузеров WebKit есть встроенная техника оптимизации для рендеринга стиля, что приводит к тому, что даже не нужно сопоставлять стиль примерно 60% элементов на вашей странице.
Тем не менее, эта оптимизация полностью отключена для всей страницы, если "какой-либо селектор сиблов встречается где угодно в таблице стилей... Это включает селектор и селектор +
, такие как :first-child
и :last-child
."
Кто-нибудь знает полный список типов селекторов, которые отключили эту оптимизацию?
-
Дополнительная информация
-
Оптимизация обсуждается в исследовании Tali Garsiel по внутренним функциям браузера: Как работают браузеры.
-
Здесь приведена полная цитата из селекторов sibling из Dave Hyatt, которая, по-видимому, написала код браузера:" Не должно быть никаких селекторов-сиблистов, которые вообще не используются. WebCore просто бросает глобальный переключатель, когда встречается какой-либо селектор, и отключает общий доступ к стилю для всего документа, когда он присутствует. Это включает селектор + и селектора, такие как first-child и last-child.
-
Эта цитата, похоже, взята из статьи Hyatt, написанной в 2005 году. Ниже он более подробно обсуждается (тот же источник, что и предыдущий):
"WebCore (в будущих версиях Safari) имеет действительно что я придумал, чтобы избежать необходимости вычислять набор объявлений, которые применяются к элементу. Эта оптимизация на практике приводит к тому, что даже не нужно сопоставлять стиль примерно 60% элементов на вашей странице. Оптимизация заключается в том, чтобы распознавать, когда два элемента на странице будут иметь один и тот же стиль с помощью проверки DOM (и другого состояния) и просто по возможности делиться информацией о стиле интерфейса между этими двумя элементами." -
Эта статья Нейта Кохели более подробно описывает алгоритм. Он суммирует это с:
"В веб-разработке часто существует 6 разных аналогичных способов сделать одно и то же. Что делает хорошего веб-разработчика постоянно выбирать наилучшие из почти неразличимых путей. Hyatt дает нам более полное представление о китах браузеров и поможет нам выбрать наилучшие методы". -
Hyatt также обсудила оптимизацию в этом архиве списка рассылки W3C
-
Он также кратко появился в чате стека от Райана Кинала: "Ого, просто ничего себе, я больше никогда не буду использовать другой селектор".
Мне особенно интересно знать:
-
ли дочерние селекторы также отключают оптимизацию
-
использует ли Trident/IE любую подобную оптимизацию
-
существуют ли какие-либо тесты, показывающие, насколько большая разница в производительности рендеринга