当你具体时,CSS会更快吗?

Emi*_*lem 44 css performance css-selectors

div.container速度比.container?你知道在jquery中,如果你对你的选择器更具体,它会更快,因为它迭代通过更少..这是css的情况吗?

有没有办法衡量css的性能?性能方面,这样的事情是否重要甚至完全取决于文本权重?

如果有人知道答案,我会很高兴,我实际上找到了一个类似的问题而没有确定的答案. 如果更好地指定CSS可以更有效吗?

xen*_*ity 47

在现实世界中,速度差异可以忽略不计.
技术.container会更快,因为它有更少的选择器来处理.

选择器具有固有的效率.因此,更高效的CSS选择器的顺序如下:

  1. ID,例如#header
  2. 等级,例如.promo
  3. 输入,例如div
  4. 相邻的兄弟姐妹,例如h2 + p
  5. 孩子,例如li > ul
  6. 后裔,*例​​如 ul a*
  7. 通用,*
  8. 属性,例如[type="text"]
  9. 伪类/元素,例如a:hover

关于你的第二个问题:

有没有办法衡量CSS的性能?

史蒂夫·索德斯(Steve Souders)推出了一项在线测试,用于测量仍可在此处访问的CSS性能.

现在有更好的方法来衡量性能,但这是一个可以使用的快速简便的资源.

性能方面,这样的事情是否重要甚至完全取决于文本权重?

简短的回答是"不是真的".

答案很长,"这取决于".如果您正在开发一个简单的站点,除了您可能从最佳实践中获得的一般知识之外,没有必要对CSS性能大惊小怪.

如果您正在创建一个包含数万个DOM元素的站点,那么它就很重要了.

  • @xengravity:但是你的姓氏中加上一个"n",并且他的域名没有一个拼写.这就是为什么克里斯认为其中一个可能是错误的:-) (3认同)
  • 关于"固有效率"以及选择者顺序的部分是史蒂夫·索德斯的书(以及http://csswizardry.com/2011/09/writing-efficient-css-selectors/在线引用)的抄袭.但是,如果我们要讨论"固有效率",我发现很难相信通用选择器会排在那么低,因为它是任何非无特征元素的保证匹配.但我不是Steve Souders ...... (2认同)

Joh*_*een 5

一般来说,规则越少越好,因此 .container 会比 div.container 更快。除了缓存之外,.container 首先被读取,然后其他元素必须添加 div 作为二级过滤器......在许多情况下是不必要的。

尽管存在一些细微的差异,但这在引擎中很常见。

请参阅这篇文章: 编写高效的 CSS,尽管它来自 MDN(因此适合 Mozilla),但它适用于我对引擎的大部分了解。

  • 我建议不要遵循“规则越少越好”的说法。* 比这样说要糟糕得多: html > body > div > .container 另一方面,“更具体的规则更好”的想法当然是正确的。 (3认同)
  • 你提出了一个有趣的观点,但我相信 * 实际上应该比 html>body>div>.container 更快。* 的作用是将自身插入到所有标签的默认浏览器样式表之上。由于 CSS 基本上是一种三明治模型,这使它成为一个较低级别(因此不太具体)的选择器,但它胜过默认样式。这并不是说你要对每个对象进行内存复制(就像通过 jquery 或其他东西一样)。因此,尽管您所说的某些内容可能是正确的,但表明 * 本质上比运行 5 条规则慢是值得商榷的。 (3认同)