时间:2021-05-02
用户喜欢快速的网络应用,他们希望页面加载速度快,功能流畅。如果在滚动时有破损的动画或滞后,用户很有可能会离开你的网站。作为一名开发者,你可以做很多事情来改善用户体验。本文将重点介绍4个可以用来提高页面渲染速度的CSS技巧。
1. Content-visibility
一般来说,大多数Web应用都有复杂的UI元素,它的扩展范围超出了用户在浏览器视图中看到的内容。在这种情况下,我们可以使用内容可见性( content-visibility )来跳过屏幕外内容的渲染。如果你有大量的离屏内容,这将大大减少页面渲染时间。
这个功能是最新增加的功能之一,也是对提高渲染性能影响最大的功能之一。虽然 content-visibility 接受几个值,但我们可以在元素上使用 content-visibility: auto; 来获得直接的性能提升。
让我们考虑一下下面的页面,其中包含许多不同信息的卡片。虽然大约有12张卡适合屏幕,但列表中大约有375张卡。正如你所看到的,浏览器用了1037ms来渲染这个页面。
下一步,您可以向所有卡添加 content-visibility 。
在这个例子中,在页面中加入 content-visibility 后,渲染时间下降到150ms,这是6倍以上的性能提升。
正如你所看到的,内容可见性是相当强大的,对提高页面渲染时间非常有用。根据我们目前所讨论的东西,你一定是把它当成了页面渲染的银弹。
content-visibility 的限制
然而,有几个领域的内容可视性不佳。我想强调两点,供大家参考。
为了解决滚动条的问题,你可以使用另一个叫做 contain-intrinsic-size 的 CSS 属性。它指定了一个元素的自然大小,因此,元素将以给定的高度而不是0px呈现。
.element{
content-visibility:auto;
contain-intrinsic-size:200px;
}
然而,在实验时,我注意到,即使使用 conta-intrinsic-size,如果我们有大量的元素,content-visibility 设置为 auto ,你仍然会有较小的滚动条问题。
因此,我的建议是规划你的布局,将其分解成几个部分,然后在这些部分上使用内容可见性,以获得更好的滚动条行为。
2. Will-change 属性
浏览器上的动画并不是一件新鲜事。通常情况下,这些动画是和其他元素一起定期渲染的。不过,现在浏览器可以使用GPU来优化其中的一些动画操作。
通过will-change CSS属性,我们可以表明元素将修改特定的属性,让浏览器事先进行必要的优化。
下面发生的事情是,浏览器将为该元素创建一个单独的层。之后,它将该元素的渲染与其他优化一起委托给GPU。这将使动画更加流畅,因为GPU加速接管了动画的渲染。
考虑以下CSS类:
//Instylesheet
.animating-element{
will-change:opacity;
}
//InHTML
<divclass="animating-elememt">
AnimatingChildelements
</div>
当在浏览器中渲染上述片段时,它将识别 will-change 属性并优化未来与不透明度相关的变化。
根据Maximillian Laumeister所做的性能基准,可以看到他通过这个单行的改变获得了超过120FPS的渲染速度,而最初的渲染速度大概在50FPS。
什么时候不是用will-change
虽然 will-change 的目的是为了提高性能,但如果你滥用它,它也会降低Web应用的性能。
.my-class{
will-change:opacity;
}
.child-class{
transition:opacity1sease-in-out;
}
最后需要注意的是,建议在完成所有动画后,将元素的 will-change 删除。
3. 减少渲染阻止时间
今天,许多Web应用必须满足多种形式的需求,包括PC、平板电脑和手机等。为了完成这种响应式的特性,我们必须根据媒体尺寸编写新的样式。当涉及页面渲染时,它无法启动渲染阶段,直到 CSS对象模型(CSSOM)已准备就绪。根据你的Web应用,你可能会有一个大的样式表来满足所有设备的形式因素。
但是,假设我们根据表单因素将其拆分为多个样式表。在这种情况下,我们可以只让主CSS文件阻塞关键路径,并以高优先级下载它,而让其他样式表以低优先级方式下载。
<linkrel="stylesheet"href="styles.css">
将其分解为多个样式表后:
<!--style.csscontainsonlytheminimalstylesneededforthepagerendering-->
<linkrel="stylesheet"href="styles.css"media="all"/>
<!--Followingstylesheetshaveonlythestylesnecessaryfortheformfactor-->
<linkrel="stylesheet"href="sm.css"media="(min-width:20em)"/>
<linkrel="stylesheet"href="md.css"media="(min-width:64em)"/>
<linkrel="stylesheet"href="lg.css"media="(min-width:90em)"/>
<linkrel="stylesheet"href="ex.css"media="(min-width:120em)"/>
<linkrel="stylesheet"href="print.css"media="print"/>
如您所见,根据样式因素分解样式表可以减少渲染阻止时间。
4. 避免@import包含多个样式表
通过 @import,我们可以在另一个样式表中包含一个样式表。当我们在处理一个大型项目时,使用 @import 可以使代码更加简洁。
关于 @import 的关键事实是,它是一个阻塞调用,因为它必须通过网络请求来获取文件,解析文件,并将其包含在样式表中。如果我们在样式表中嵌套了 @import,就会妨碍渲染性能。
#style.css
@importurl("windows.css");
#windows.css
@importurl("componenets.css");
与使用 @import 相比,我们可以通过多个 link 来实现同样的功能,但性能要好得多,因为它允许我们并行加载样式表。
总结
除了我们在本文中讨论的4个方面,我们还有一些其他的方法可以使用CSS来提高网页的性能。CSS最近的一个特性: content-visibility,在未来的几年里看起来是如此的有前途,因为它给页面渲染带来了数倍的性能提升。
最重要的是,我们不需要写一条JavaScript语句就能获得所有的性能。
我相信你可以结合以上的一些功能,为终端用户构建性能更好的Web应用。希望这篇文章对你有用,如果你知道什么CSS技巧可以提高Web应用的性能,请在下面的评论中提及。谢谢大家。
原文地址:https://www.toutiao.com/i6915397176696832519/
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1、提高页面加载速度。能用css解决的不用背景图片,背景图片也尽量压缩大小,可以几个icons放在一个图片上,采用css精灵(csssprite),使用ba
iphone上网速度慢是一个通病,今天教大家一个让移动iphone提高上网速度的方法,只需要简单的设置就可以让你的上网速度变得快起来。相信大家在日常的使用中,都
页面代码的优化对于页面加载速度也有不小的影响,最广为人知的:HTML头部的JavaScript和写在HTML标签中的Style会阻塞页面的渲染,因此CSS放在页
怎样尽可能的缩短浏览器上页面渲染的时间,文章从以下几方面着手:写出高效的css代码避免使用css表达式把css文件放在页面顶部指定页面图片的尺寸页面头部标明文档
1.静态加载CSS,图片资源文件在页面渲染过程中可以并行下载,不会阻塞。在IE8,FF下,也可以支持JS的并行下载。尽管页面的JS下载加速了,但是JS对页面渲染