探秘网页性能提升利器之CSS硬件加速

今天我们将为大家介绍一个令网页性能大幅提升的神奇技术——CSS硬件加速。随着移动互联网的蓬勃发展和网页设计越发复杂,如何优化网页性能成为了前端开发者们亟待解决的问题。在这篇文章中,我们将深入了解CSS硬件加速的原理,并通过一个生动的案例来展示它如何帮助我们改善网页的渲染性能。

一、什么是CSS硬件加速

在传统的网页渲染中,浏览器使用中央处理器(CPU)来处理CSS样式和页面渲染。然而,随着网页变得越来越复杂,例如包含大量动画、过渡效果或复杂的变换,CPU可能会承担较重的负担,导致页面加载缓慢或卡顿。CSS硬件加速是一种解决方案,它充分利用了计算机的图形处理单元(GPU)来加快CSS样式的处理和渲染,从而提高页面性能和流畅度。

1.1 CPU 

CPU 即中央处理器。

CPU是计算机的大脑,它提供了一套指令集,我们写的程序最终会通过 CPU 指令来控制的计算机的运行。它会对指令进行译码,然后通过逻辑电路执行该指令。整个执行的流程分为了多个阶段,叫做流水线。指令流水线包括取指令、译码、执行、取数、写回五步,这是一个指令周期。CPU会不断的执行指令周期来完成各种任务。

1.2 GPU 

GPU 即图形处理器。

GPU,是Graphics ProcessingUnit的简写,是现代显卡中非常重要的一个部分,其地位与CPU在主板上的地位一致,主要负责的任务是加速图形处理速度。GPU是显卡的“大脑”,它决定了该显卡的档次和大部分性能,同时也是2D显示卡和3D显示卡的区别依据。2D显示芯片在处理3D图像和特效时主要依赖CPU的处理能力,称为“软加速”。3D显示芯片是将三维图像和特效处理功能集中在显示芯片内,也即所谓的“硬件加速”功能。

二、CSS硬件加速原理

CSS硬件加速的原理涉及到浏览器的渲染引擎、GPU以及优化渲染的过程。

2.1 浏览器的渲染流程

一个完整的渲染步骤大致可总结为如下:

  • 渲染进程将HTML内容转换为能够读懂的DOM树结构。

  • 渲染引擎将CSS样式表转化为浏览器可以理解的 styleSheets ,计算出DOM节点的样式。

  • 创建布局树,并计算元素的布局信息。

  • 对布局树进行分层,并生成分层树。

  • 为每个图层生成绘制列表,并将其提交到合成线程。

  • 合成线程将图层分成图块,并在光栅化线程池中将图块转换成位图。

  • 合成线程发送绘制图块命令DrawQuad给浏览器进程。

  • 浏览器进程根据DrawQuad消息生成页面,并显示到显示器上。

图片

2.2 CSS硬件加速触发

在传统的渲染过程中,布局和绘制是由CPU来完成的,而在CSS硬件加速下,GPU参与了渲染的处理,从而提高了性能。

CSS 中的以下几个属性能触发硬件加速:

1.transform属性:该属性用于应用2D或3D变换效果,如旋转、缩放、平移等。当使用transform属性时,浏览器会将变换任务交给GPU处理,从而实现硬件加速。

2.opacity属性:该属性用于设置元素的不透明度。虽然它主要用于控制透明度,但是一个不为1的值(例如0.99)也可以触发硬件加速。

3.will-change属性:will-change属性用于提示浏览器一个元素将要发生的变化,以便浏览器在渲染过程中做出优化。

一旦CSS硬件加速被触发,相关的渲染任务将被GPU处理。GPU在处理图形和动画方面通常比CPU更快和更高效。对于复杂的CSS动画和变换,GPU可以并行处理多个任务,从而提高性能和流畅度。

请注意,CSS硬件加速并不是适用于所有情况。虽然它在许多情况下可以带来显著的性能提升,但有时也可能导致额外的GPU资源占用,从而影响其他应用程序的性能。因此,在使用CSS硬件加速时,我们应该进行性能测试和优化,确保在特定情况下确实能获得性能的提升。

三、CSS硬件加速案例

现在,我们来看一个实际的案例,通过启用CSS硬件加速来改善网页性能。

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8" />

<meta name="viewport" content="width=device-width, initial-scale=1.0" />

<title>Document</title>

<style>

.app {

position: relative;

width: 400px;

height: 400px;

}

.box {

position: absolute;

left: 0;

top: 0;

width: 100px;

height: 100px;

background-color: yellowgreen;

}

.box-run1 {

-webkit-animation: run1 4s infinite;

animation: run1 4s infinite;

}

.box-run2 {

-webkit-animation: run2 4s infinite;

animation: run2 4s infinite;

}

@keyframes run1 {

0% {

top: 0;

left: 0;

}

25% {

top: 0;

left: 200px;

}

50% {

top: 200px;

left: 200px;

}

75% {

top: 200px;

left: 0;

}

}

@keyframes run2 {

0% {

transform: translate(0, 0);

}

25% {

transform: translate(200px, 0);

}

50% {

transform: translate(200px, 200px);

}

75% {

transform: translate(0, 200px);

}

}

</style>

</head>

<body>

<div class="app">

<div class="box"></div>

</div>

<button class="btn1">循环转换</button>

<button class="btn2">硬件加速</button>

<script>

let box = document.querySelector(".box");

let btn1 = document.querySelector(".btn1");

let btn2 = document.querySelector(".btn2");

btn1.addEventListener("click", function (e) {

box.classList.remove("box-run2");

box.classList.add("box-run1");

});

btn2.addEventListener("click", function (e) {

box.classList.remove("box-run1");

box.classList.add("box-run2");

});

</script>

</body>

</html>

此时我们可以运行代码,在页面上可以看到,2个按钮均能使box在app当中循环移动。但对于这两种方式的移动,他们的效率却有着很大的差异。我们可以使用开发者工具里的Performance去查看。

图片

当我们点击btn1时,此时box盒子通过定位的left和top进行循环移动时。

图片

此时我们可以看到细节模块的记录详情。

蓝色(Loading):网络通信和HTML解析

黄色(Scripting):Javascript执行

紫色(Rendering):样式计算和布局,即重排

绿色(Painting):重绘

灰色(Other):其他事件花费的时间

白色(Idle):空闲时间

细节模块有4个面板,Summary面板每个事件都会有,其他三个只针对特定事件会有。

当我们点击btn2时,此时box盒子通过transform属性进行css硬件加速后进行循环移动时。

图片

通过对比我们不难发现,当启用硬件加速时,方块的变换会更加流畅,其样式计算和布局、重绘的时间都会减少。因为GPU参与了渲染过程。

总结

CSS硬件加速是一个强大的前端技术,可以显著提高网页的性能和流畅度。通过启用硬件加速,我们可以将一些渲染任务交给GPU来处理,减轻CPU的负担,从而优化网页的渲染性能。然而,我们需要注意不要滥用硬件加速,避免触发不必要的GPU渲染,以确保真正获得性能提升。在日常的网页开发中,我们可以灵活运用CSS硬件加速,为用户带来更好的浏览体验。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值