类和属性选择器之间的 CSS 性能

问题描述 投票:0回答:6

我想知道使用属性选择器而不是类选择器是否存在性能问题。

div.test {}
div[test] {}

附注: 我只对 CSS 性能感兴趣,对 JS 不感兴趣。

css performance css-selectors
6个回答
14
投票

根据这篇文章,类选择器比属性选择器更有效。


5
投票

有人实际上创建了一个现实生活中的选择器测试,展示选择器匹配性能。

该表概述了属性选择器的速度比标准类慢大约 3 倍。

依赖属性选择器还需要更多字符来定位元素。最好定义简短的类名,以保持样式表较小。

示例:

// 17 Characters (attribute)
[title="example"] {
 ...
}

// 6 Characters (class)
.title {
 ...
}

http://scope.bitbucket.org/tests/selector-matching-performance/


2
投票

根据这个项目,不存在真正的性能问题。

这让我们感到惊讶,因为选择器的性能并不是真正的 关心我们的日常工作一段时间。前端性能是 当然,这很重要,但是 CSS 选择器似乎贡献了这样的作用 与总页面加载时间相比微不足道 我们认为这可能是许多人主要关心的问题。

他们也有基准。 编辑:请参阅评论:他们有基准想法*,而不是基准。

https://github.com/amcss/am-benchmarks


1
投票

不存在性能问题。两者的作用相同。但是带有 class 的 css 与 Elements 的 css 的特异性是有区别的。

特异性 - 特异性决定了浏览器应用哪个 CSS 规则。

如果两个选择器应用于同一元素,则特异性较高的选择器获胜。

但是特异性是有层次的。

  1. 内联样式(文档中样式的存在)。 内联样式存在于您的 XHTML 文档中。它直接附加到要设置样式的元素。例如。
  2. IDs(ID 选择器的数量) ID 是页面元素的标识符,例如#div。
  3. 类、属性和伪类(类选择器的数量)。 该组包括 .classes、[attributes] 和伪类,例如 :hover、:focus 等。
  4. 元素和伪元素(元素(类型)选择器的数量)。 包括例如:之前和:之后。

来源:http://coding.smashingmagazine.com/2007/07/27/css-specificity-things-you-should-know/

因此

div.test {}
更具体。


1
投票

数据属性较慢,但没到我关心的程度。用 JS 测试它给我这些结果:

Test name       Executions per second
.....................................
Class           5017198.0 Ops/sec
ID              3808182.0 Ops/sec
data attribute  3289109.0 Ops/sec

https://measurethat.net/Benchmarks/ShowResult/436379

我很确定纯 CSS 速度要快得多。


0
投票

1

不存在性能问题。两者的作用相同。但是带有 class 的 css 与 Elements 的 css 的特异性是有区别的。

特异性 - 特异性决定浏览器应用哪个 CSS 规则。

如果两个选择器应用于同一元素,则特异性较高的选择器获胜。

但是特异性是有层次的。

内联样式(文档中样式的存在)。内联样式存在于您的 XHTML 文档中。它直接附加到要设置样式的元素。例如。 ID(ID 选择器的数量) ID 是页面元素的标识符,例如#div。 类、属性和伪类(类选择器的数量)。该组包括 .classes、[attributes] 和伪类,例如 :hover、:focus 等。 元素和伪元素(元素(类型)选择器的数量)。包括例如:之前和:之后。强文本

© www.soinside.com 2019 - 2024. All rights reserved.