【发布时间】:2012-08-30 01:28:02
【问题描述】:
是否值得担心 CSS 渲染性能? 或者我们是否应该完全不担心 CSS 的效率,而只专注于编写优雅或可维护的 CSS?
这个问题旨在为前端开发人员提供有用的资源,了解 CSS 的哪些部分实际上会对设备性能产生重大影响,以及哪些设备/浏览器或引擎可能会受到影响。这不是一个关于如何编写优雅或可维护的 CSS 的问题,它纯粹是关于性能的(尽管希望这里写的内容可以为更多关于最佳实践的一般文章提供信息)。
现有证据
Google 和 Mozilla 编写了关于编写高效 CSS 的指南,CSSLint's set of rules 包括:
避免使用看起来像正则表达式的选择器 .. 不要使用复杂的等式运算符来避免性能损失
但他们都没有提供任何证据(我能找到)这些影响。
css-tricks.com article on efficient CSS 认为(在概述了大量效率最佳实践之后)我们现在应该not .. sacrifice semantics or maintainability for efficient CSS。
perfection kills blog post 建议 border-radius 和 box-shadow 呈现比简单的 CSS 规则慢几个数量级。这在 Opera 引擎中非常重要,但在 Webkit 中微不足道。此外,smashing magazine CSS benchmark 发现 CSS3 显示规则的渲染时间微不足道,并且比使用图像渲染等效效果要快得多。
了解您的移动设备 tested various mobile browsers 并发现它们都以同样微不足道的速度渲染 CSS3(在 12 毫秒内),但看起来他们在 PC 上进行了测试,因此我们无法推断手持设备的性能如何一般的 CSS3。
网上有aremanyarticles关于如何编写高效的CSS。但是,我还没有找到任何全面的证据表明 CSS 实际上对网站的呈现时间或快速性有显着的影响。
背景
我为这个问题提供了悬赏,试图利用 SO 的社区力量来创建一个有用的、经过充分研究的资源。
【问题讨论】:
-
我可以肯定地告诉你一件事:在应该使用 ID 时使用 ID,在应该使用类时使用类。性能差异可以忽略不计,语义则不然。元素的 ID——根据定义——只出现一次;那些可以在整个页面中重复的课程。只需考虑将类用于
fixedCSS 位置的极端情况。 -
@MichałGórny ID 应该在 markup 中适当的地方使用,但是很多人(包括我自己)认为 ID 永远不应该在 CSS 选择器中使用。阅读这篇文章以获得(希望是公正的)详细说明:screwlewse.com/2010/07/dont-use-id-selectors-in-css
-
嗯,那篇文章同意我关于何时可以并且应该使用 ID 的观点。我的极端例子
position: fixed是一个根本不应该重用CSS 的例子。并不是说我提倡做这样的事情。 -
请记住,大多数浏览器已经尽力优化选择器。以right-to-left matching on a per-element basis 为例。大多数选择器的速度与页面上的元素一样慢。如果您有一个非常简单的页面,其中只有三个
body的子级而没有其他任何内容,那么您向其抛出的任何选择器都不会导致浏览器出现故障甚至冻结。 -
@BoltClock 我对可以显着影响渲染性能的所有样式元素感兴趣。尽管选择器更容易为其定义最佳实践,但这些技巧可能最具有吸引力。
标签: performance css client-side rendering-engine