Я пытаюсь найти несколько простых настроек производительности на стороне клиента на странице, которая получает миллионы просмотров страниц в месяц. Меня беспокоит использование универсального селектора CSS (*
).
В качестве примера рассмотрим очень простой HTML-документ, подобный следующему:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Example</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
</head>
<body>
<h1>This is a heading</h1>
<p>This is a paragraph of text.</p>
</body>
</html>
Универсальный селектор применит указанное выше объявление к элементам body
, h1
и p
, поскольку они единственные в документе.
В общем, могу ли я увидеть лучшую производительность от такого правила, как:
body, h1, p {
margin: 0;
padding: 0;
}
Или это будет иметь точно такой же чистый эффект?
Универсальный селектор выполняет больше работы, о которой я могу не знать?
Я понимаю, что влияние на производительность в этом примере может быть очень небольшим, но я надеюсь узнать что-то, что может привести к более значительным улучшениям производительности в реальных ситуациях.
Я не собираюсь переопределять стили в правиле универсального селектора другими стилями позже в документе, то есть использовать его как таблицу стилей быстрого и грязного сброса. На самом деле я пытаюсь использовать универсальный селектор именно так, как я думаю, он предназначен - раз и навсегда применить набор правил ко всем элементам в документе.
В конечном счете, я надеюсь определить, есть ли что-то медленное в универсальном селекторе или у него просто плохая репутация из-за безудержного злоупотребления. Если * { margin: 0; }
буквально эквивалентно body, h1, p { margin: 0; }
, то это ответит на мой вопрос, и я знаю, что нужно использовать первое, поскольку оно более краткое. Если нет, я хочу понять, почему универсальный селектор работает медленнее.
*
буквально не эквивалентноbody, h1, p
по очевидным причинам. Единственная причина, по которой он работает медленнее, заключается в том, что вы применяете стили ко всему, тогда как любые другие селекторы ограничивают вас определенным подмножеством элементов в DOM. Но реальный вопрос заключается в том, действительно ли браузер перестанет отвечать из-за применения слишком большого количества стилей намного медленнее? Я очень в этом сомневаюсь. См. Также: * {box-sizing: border-box} FTW - person BoltClock   schedule 23.07.2012