html标签上的多个类总是会影响渲染性能吗?

Posted

技术标签:

【中文标题】html标签上的多个类总是会影响渲染性能吗?【英文标题】:Do multiple classes on html tag always affect rendering performance? 【发布时间】:2018-03-08 19:47:32 【问题描述】:

遇到了interesting video,关于在 Chrome 开发工具中调试渲染性能。在他的课程中,Umar 将 html 标签上 CSS 类的更改确定为呈现瓶颈的根源。 Devtools 显示更改此类可能会影响 DOM 中 html 以下的 3,874 个元素,并触发昂贵的 recalculate style 操作。

过去,我在htmlbody 标记中添加了CSS 类,作为表达该级别页面状态的便捷方式。

您的 CMS 可能出于同样的目的这样做。例如,在 WordPress 网站中,您可能会在帖子的 body 标签上看到一堆类,例如 post-template-default single single-post postid-99999 single-format-standard logged-in category-news subcategory-uk has-hover

我们应该避免这种做法吗?还是只有在 CSS 规则中使用类时才会影响渲染性能?

【问题讨论】:

我不确定是什么问题。性能问题是由必要的页面重新绘制引起的。所以如果没有重绘,就没有问题。 例如 BEM 等不同的 CSS 方法都使用这种模式,没有人谈论在一行中堆叠超过 1 个类的性能。 谢谢@MrLister,我想我明白了 - 所以如果没有与类相关的 CSS 规则,并且我更改了 html 标签上的类,浏览器将不会尝试重新计算任何样式.我认为 Umar 视频的重点是,当 are CSS 规则受 DOM 顶部标签上的类影响时,这可能会很昂贵。 谢谢@Nicholas,我认为问题在于将一个类添加到一个标签中,其中包含许多不同级别的其他标签。 【参考方案1】:

只有应用了 CSS 样式时,它才会影响性能。

浏览器供应商花费大量时间来确保一流的性能,因此处理 CSS 规则,以便可以非常有效地扫描它们以查找必要的渲染更改......甚至在应用它们时尝试优化会导致级联的更改回流。

【讨论】:

感谢@scunliffe,这似乎是答案——我们只需要担心那些添加 CSS 规则的类。

以上是关于html标签上的多个类总是会影响渲染性能吗?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Blade 模板引擎会影响性能吗?

文本 CSS 渲染性能:RGBA vs HEX vs OPACITY

一个页面加载多js 影响性能吗

KeyDown 上的 setTimeout 会影响性能吗?

继承真的不影响性能吗?

如果多个线程使用同一个对象,性能会受到影响吗? [关闭]