CSS 性能分析器?

Posted

技术标签:

【中文标题】CSS 性能分析器?【英文标题】:CSS Performance Profiler? 【发布时间】:2011-07-07 14:02:10 【问题描述】:

我目前正在开发一个网站,在我的大量样式表中的某个地方,某些东西正在扼杀 IE 的性能。有没有好的 CSS 分析器?我想要一个可以查明影响性能的规则的工具。

在你问之前,我已经禁用了 javascript、不透明度和 box-shadow/text-shadow 规则。页面仍然跳跃。 :/ 如果我禁用所有 CSS,它运行得很好。

我需要一个可以分析页面并报告 CSS 瓶颈所在的工具。

【问题讨论】:

因此看起来流氓 CSS 规则仅适用于 IE9。没错,IE7/8 在此页面上击败了 IE9。我使用几个干净的虚拟机仔细检查了这个结果。唯一落后的环境是 IE9。 :// 另外一个有趣的点是在IE9中切换到IE7或IE8模式消除了瓶颈。 【参考方案1】:

所以,我终于开始编写一个 JavaScript 函数,它索引页面上的所有 CSS 类,然后在滚动页面时单独切换它们。这立即确定了错误的类,并且从那里,我能够确定错误的属性。结果表明,border-radius 在包含许多子元素的元素上(例如身体级别 div)在 IE9 上的表现难以置信

我已经为我的 CSS 压力测试创建了一个 github 存储库:https://github.com/andyedinborough/stress-css

从那里,您可以安装一个小书签,以便在任何页面上轻松运行测试。

【讨论】:

干得好!这也解释了为什么切换到 IE7/IE8 会使其运行更快。【参考方案2】:

来自 Google 的 Page Speed 插件有一个部分可以分析你的 CSS 并告诉你低效的选择器,也许从那里开始?

注意:我知道它是一个 Firefox 插件,但应该有助于优化一点 :)

【讨论】:

谢谢,我忘记了 Page Speed。尽管这不是我真正想要的,但它很有帮助。 您可以做的一件事就是确定有问题的区域是评论一半的css,测试它,评论下半部分。当你找到减慢速度的一半时,重复但在那一半。然后你会发现花时间的规则。只是另一个想法,而我有一个谷歌给你:) 奇怪的是我似乎无法缩小范围......几乎就像每条规则都同样降低了性能。 ://【参考方案3】:

嗯,从来没有听说过这样的工具。

如果您没有找到,需要手动查找的内容包括

任何filter 语句(经典的alpha=opacity 和其他 - IE 有许多非常高级的图形过滤器,非常昂贵)

巨大的元素(比如数千个像素)

巨大的背景图片 - 可能暂时将它们全部删除?

我强烈怀疑第一点 - Alpha 透明度可能是一个可怕的渲染瓶颈,尤其是在旧系统上。

【讨论】:

感谢 Pekka,但实际上禁用不透明度是我做的第一件事。虽然它帮助了一些人,但仍然存在滞后。 @Andy 是的,你已经提到了不透明度 - 抱歉,过度阅读了。【参考方案4】:

我目前正在处理的一个网络项目也存在性能问题。它在 Firefox、Chrome 甚至 IE8 中运行良好。在 IE9 中它陷入困境。

经过一番探索性工作后,我发现消除所有 box-shadow CSS 行可以显着提高性能。我有来自横幅、表格、框和标签的阴影,每一个都只有少量的阴影和模糊,但显然足以让 IE9 变得喜怒无常。

【讨论】:

在移除单个 115px 嵌入框阴影(在透明覆盖 div 中)时,我在 nexus 4 上对 chrome mobile 进行了大幅改进。移除较小的阴影会带来相应较小的性能提升。【参考方案5】:

Chrome 开发工具曾经包含一个 CSS Selector Profiler 来做这类事情。你可以看到它的屏幕截图in this blog post。

Chrome 团队 pulled the feature in Chrome 30 声明:

CSS 选择器匹配现在对于绝大多数常见的选择器来说是相当快的,而这些选择器在分析器实现时曾经很慢。此时间也包含在时间轴“重新计算样式”事件中。

因此,我认为 CSS 选择器分析器并不像 [可能已经] 使用的那么有用,并且可以安全地删除。这也将减少尝试对已经很快的选择器进行微优化的开发人员。

您可以尝试使用旧版本的 Chrome 来解决问题,但我建议您查看当前版本的 Chrome 开发工具的 Timeline tab,它会告诉您 Chrome 花了多长时间计算样式(影响选择器性能的地方)、布局和绘制页面。

【讨论】:

【参考方案6】:

Opera 正在其分析器中试验 css 分析。

可以启用following the steps on this page。 然后打开分析器,开始分析,并刷新您要分析的页面。 渲染完成后停止分析,然后将显示结果。

【讨论】:

以上是关于CSS 性能分析器?的主要内容,如果未能解决你的问题,请参考以下文章

前端性能优化 css和js的加载与执行

js 动画性能分析 transfrom

性能分析

浏览器层面优化前端性能:Reader引擎线程与模块分析优化点

性能优化之reflow和repaint

Web性能优化之 “直出” 理论与实践总结