当前位置: 首页 > 科技观察

仅使用CSS提高页面呈现速度的4个技巧

时间:2023-03-18 11:52:50 科技观察

用户喜欢快速的Web应用程序,他们希望页面能够快速加载并流畅运行。如果滚动时动画损坏或滞后,用户很可能会离开您的网站。作为开发人员,您可以做很多事情来改善用户体验。本文将重点介绍可用于提高页面呈现速度的4个CSS技巧。1.内容可见性通常,大多数Web应用程序都有复杂的UI元素,这些元素超出了用户在浏览器视图中看到的内容。在这种情况下,我们可以使用内容可见性来跳过屏幕外内容的渲染。如果你有很多屏幕外的内容,这将大大减少页面渲染时间。此功能是最新添加的功能之一,也是对提高渲染性能影响最大的功能之一。虽然content-visibility接受多个值,但我们可以使用content-visibility:auto;在一个元素上立即提升性能。让我们考虑以下页面,其中包含许多具有不同信息的卡片。虽然屏幕上可以容纳大约12张卡片,但列表中大约有375张卡片。如您所见,浏览器用了1037毫秒来呈现页面。下一步,您可以为所有卡片添加内容可见性。在本例中,在页面中加入content-visibility后,渲染时间下降到150ms,性能提升超过6倍。如您所见,内容可见性非常强大,对于缩短页面呈现时间非常有用。从我们目前所讨论的内容来看,您一定将其视为页面呈现的灵丹妙药。内容可见性限制然而,有几个区域的内容可见性很差。我想强调两点,供大家参考。此功能仍处于试验阶段。截至目前,Firefox(PC和Android版本)、IE(我认为他们没有计划将此功能添加到IE)和Safari(Mac和iOS)不支持内容可见性。与滚动条行为相关的问题。由于元素的初始渲染高度为0px,因此无论何时向下滚动,这些元素都会出现在屏幕上。呈现实际内容并相应地更新元素的高度。这将使滚动条以意想不到的方式运行。要修复滚动条问题,您可以使用另一个名为contain-intrinsic-size的CSS属性。它指定元素的自然大小,因此,元素将以给定的高度而不是0px呈现。.element{content-visibility:auto;contain-intrinsic-size:200px;}但是,在试验时,我注意到即使使用conta-intrinsic-size,如果我们有大量元素,content-visibility也会设置为auto,您仍然会遇到较小滚动条的问题。所以我的建议是规划您的布局,将其分成多个部分,然后在这些部分上使用内容可见性以获得更好的滚动条行为。2.Will-change属性浏览器上的动画并不是什么新鲜事。通常,这些动画会与其他元素一起定期呈现。然而,浏览器现在可以使用GPU来优化其中的一些动画操作。使用will-changeCSS属性,我们可以指示元素将修改特定属性,从而允许浏览器提前执行必要的优化。下面发生的是浏览器将为该元素创建一个单独的层。之后,它将对该元素的渲染以及其他优化委托给GPU。这将使动画更流畅,因为GPU加速接管了动画的渲染。考虑以下CSS类://Instylesheet.animating-element{will-change:opacity;}//InHTMLAnimatingChildelements

当上述片段在浏览器中呈现时,它将识别will-change属性并针对未来与不透明度相关的变化进行优化。根据MaximillianLaumeister做的性能基准可以看出,他通过这一行改动获得了超过120FPS的渲染速度,而原来的渲染速度大约是50FPS。何时不使用will-change虽然will-change的目的是提高性能,但如果滥用它,它也会降低Web应用程序的性能。使用will-change表示该元素将来会发生变化。所以如果你尝试同时使用will-change和动画,它不会给你优化。因此,推荐在父元素上使用will-change,在子元素上使用animation。.my-class{will-change:opacity;}.child-class{transition:opacity1sease-in-out;}不要使用非动画元素。当您在元素上使用will-change时,浏览器会尝试通过将元素移动到新层并将转换卸载到GPU来优化它。如果您没有任何要转换的东西,那将是一种资源浪费。最后一点,建议在所有动画完成后移除元素的will-change。3.减少RenderBlockingTime如今,许多Web应用程序必须满足多种形式的需求,包括PC、平板和手机。为实现此响应功能,我们必须根据媒体大小编写新样式。在页面渲染方面,只有CSS对象模型(CSSOM)准备就绪后才能开始渲染阶段。根据您的Web应用程序,您可能有一个大型样式表来满足所有设备外形因素。但是,假设我们根据外形因素将其拆分为多个样式表。在这种情况下,我们可以只让主CSS文件屏蔽关键路径并以高优先级下载,而其他样式表以低优先级下载。将其分解为多个样式表后:如你所见,打破按样式因子设置样式表可减少渲染阻塞时间。4.避免@import包含多个样式表使用@import,我们可以在另一个样式表中包含一个样式表。当我们在做一个大项目的时候,使用@import可以让代码更加简洁。关于@import的关键事实是它是一个阻塞调用,因为它必须发出网络请求来获取文件、解析文件并将其包含在样式表中。如果我们在样式表中嵌套@imports,它会影响渲染性能。#style.css@importurl("windows.css");#windows.css@importurl("componenets.css");与使用@import相比,我们可以通过多个链接实现相同的功能,但性能要好得多,因为它允许我们并行加载样式表。总结除了我们在本文中讨论的4个方面之外,还有一些其他方法可以使用CSS来提高网页的性能。CSS最近的一个特性:content-visibility,在未来几年看起来很有前途,因为它带来了数倍于页面渲染的性能提升。最重要的是,我们无需编写单个JavaScript语句即可获得所有性能。我相信您可以结合上面的一些功能来为最终用户构建性能更好的Web应用程序。希望本文对您有用,如果您知道任何可以提高Web应用程序性能的CSS技巧,请在下面的评论中提及。谢谢你们。