Почему .classname хуже, чем element.classname - PullRequest
0 голосов
/ 14 декабря 2011

Может кто-нибудь помочь мне объяснить, почему:

#id .classname

хуже чем:

#id element.classname

с точки зрения рендеринга / производительности?

Ответы [ 5 ]

1 голос
/ 14 декабря 2011

Я думаю, потому что в первом примере механизм рендеринга браузера должен искать каждый элемент с классом classname внутри элемента #id.

Второй пример будет быстрее, потому что механизм ищеткаждый элемент element с этим классом.

Извините за игру в слова, однако это не должно влиять на производительность.

1 голос
/ 14 декабря 2011

Поскольку в DOM есть специальные функции (getElementByTagName), предназначенные для поиска всех элементов в дереве по имени тега. Эти функции используют таблицы поиска и хорошо оптимизированы. Однако для имен классов такого метода не существует, и для поиска имени класса требуется выполнить итерацию по всем деревьям и проверить существующие имена классов. Этот алгоритм можно ускорить, уменьшив размер деревьев для итерации, и используя префикс element., он просто делает это: уменьшает размер деревьев для поиска имени класса.

1 голос
/ 14 декабря 2011

просто потому, что .classname должен проверять все элементы для указанного имени класса, тогда как type.classname должен только проверять элементы, соответствующие указанному типу.

0 голосов
/ 14 декабря 2011

Это не так.

Для первого селектора браузер проверяет, есть ли у элемента класс, затем он проверяет, есть ли у какого-либо потомка идентификатор.

Длявторой селектор, браузер проверяет, есть ли у элемента класс, затем, если проверяет, соответствует ли элемент имени тега, то он проверяет, есть ли у какого-либо потомка идентификатор.

Если селекторы имеют тот же эффект,первый селектор лучше , поскольку браузер должен выполнить меньше проверок, чтобы соответствовать правилу.

Подробнее об эффективных селекторах: http://code.google.com/speed/page-speed/docs/rendering.html#UseEfficientCSSSelectors

0 голосов
/ 14 декабря 2011

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

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