6

我一直在阅读很多 CSS 性能文章,例如;

我明白为什么这样的选择器不好

#social a {
}

由于浏览器将首先读取a,然后被迫循环浏览页面中的所有<a>标记。

但是为什么像a[title="home"]这样的选择器比使用class慢?

我假设浏览器会创建某种索引,以便能够找出哪些元素具有某个类(正确?)。

但是浏览器不应该也索引哪些元素具有某个属性吗?(如标题)?

我的问题是与使用类相比, 为什么使用诸如a[title="home"] 之类的选择器时 CSS / 元素的查找速度要慢一些?浏览器采取什么行动或如何行动以使结果慢得多?

4

2 回答 2

3

浏览器实现者优化了最常见的情况。由于类经常用于匹配样式,因此它们必须尽可能有效地实现这一点。当他们在 CSS 中加载时,他们索引类以使这成为可能。

由于随机选择器 liketitle="home"的使用并不频繁,他们可以使用更简单的搜索来实现它们。它不会对性能产生太大影响,因为它很少被使用。

类也需要在浏览器中进行特殊处理,因为一个元素可能有多个类,例如class="foo bar baz". 解析文档时,浏览器需要将其拆分,以便可以将它们中的任何一个与 CSS 选择器进行匹配。

于 2013-08-30T09:22:30.533 回答
0

基准

结论

在大多数情况下,'具有未知属性的属性选择器,例如 [a="b"]' 和'具有已知属性的属性选择器,例如 [title="a"]' 出现在'3 Worst' 类别中。可以肯定地说您应该避免使用这些选择器。

于 2013-08-30T09:28:29.483 回答