我试图标记这个问题[subjective]
(它不会让我),因为我意识到它可能无法回答,可能是我不知道如何找到的常识,或者可能是意见问题。
几个月来,我一直在使用编译(LESS)样式表构建商业网站,每次将背景渐变应用于元素时,规则如下:
body {
background: #592a0e;
background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiPjxsaW5lYXJHcmFkaWVudCBpZD0iZyIgeDE9IjAiIHkxPSIwIiB4Mj0iMSIgeTI9IjAiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzJkMTUwNyIgLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM4NTNmMTUiIC8+PC9saW5lYXJHcmFkaWVudD48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2cpIiAvPjwvc3ZnPg==);
background: -webkit-gradient(linear, 0 0, 100% 0, from(#2d1507), to(#853f15));
background: -webkit-linear-gradient(left, #2d1507, #853f15);
background: -moz-linear-gradient(left, #2d1507, #853f15);
background: -ms-linear-gradient(left, #2d1507, #853f15);
background: -o-linear-gradient(left, #2d1507, #853f15);
background: linear-gradient(left, #2d1507, #853f15);
filter: progid:dximagetransform.microsoft.gradient(StartColorStr='#2d1507', EndColorStr='#853f15', GradientType=1);
-ms-filter: "progid:DXImageTransform.Microsoft.Gradient(StartColorStr='#2d1507', EndColorStr='#853f15', GradientType=1)";
zoom: 1;
}
SVG 内联渐变,从开始和结束颜色以 LESS 编译,适用于 IE9。否则 IE9 将在非零元素的圆角之外显示矩形 IE 过滤器渐变border-radius
。(CSS 中的其他地方设置.ie9 a, .ie9 div { filter: none !important; }
为仅抑制 IE9 的 IE 过滤器。)
我的问题:我担心可能出现的性能问题,并想了解如何全面调查它们,或者如果这些问题很小,可以永久消除这些担忧。例如,该站点基于所有水平和垂直渐变、菜单项、标题、按钮和悬停属性使用了这样的背景声明 21 次。
我没有证据表明此类站点存在性能问题,但我如何确定以下假设问题是否会导致性能问题,我该如何调查它,以及我如何重新编码以避免它?
- 更复杂的 CSS 是否会导致渲染时间变慢?所有这些网站都设计为对移动设备友好,所以我担心渲染和解析可能是旧移动浏览器上的问题。
- 为了简化 CSS,并避免过度使用浏览器类
ie9
(我们通常modernizr
用于特征检测),SVG 渐变和 CSS 渐变声明保持在同一个规则集中。替代方案将是更复杂的 CSS,为每个具有渐变的元素使用单独的 IE9 规则(带有 SVG 渐变)。在我决定保持 CSS 简单时,我担心上面的代码可能会绘制两次背景,这可能会导致性能问题。 - 对于已经了解 CSS 背景渐变的非 IE 浏览器,解析内联 SVG 渐变是否繁琐?每次呈现页面时,还是仅在最初读取和解析 CSS 时,这是否会导致性能下降?
如果我犯了任何严重的错误、遗漏了任何重要的浏览器或忽略了任何其他性能问题,我当然愿意更正。如果有人有兴趣,我将发布编译 SVG 渐变的 LESS 代码,尽管它与我的问题没有具体关系。