一文读懂:GPU加速是什么?

article/2025/8/28 10:55:49

众所周知,网页不仅应该被快速加载,同时还应该流畅运行,比如快速响应的交互,如丝般顺滑的动画……

一. GPU加速能做什么?

首先我们要了解什么是16ms优化

大多数设备的刷新频率是60次/秒,(1000/60 = 16.6ms)也就说是浏览器对每一帧画面的渲染工作要在16ms内完成,超出这个时间,页面的渲染就会出现卡顿现象,影响用户体验。

浏览器在一帧里面,会依次执行以下这些动作。减少或者避免layout,paint可以让页面不卡顿,动画效果更加流畅。

  1. JavaScript:JavaScript实现动画效果,DOM元素操作等。
  2. Style(计算样式):确定每个DOM元素应该应用什么CSS规则。
  3. Layout(布局):计算每个DOM元素在最终屏幕上显示的大小和位置。由于web页面的元素布局是相对的,所以其中任意一个元素的位置发生变化,都会联动的引起其他元素发生变化,这个过程叫reflow。
  4. Paint(绘制):在多个层上绘制DOM元素的的文字、颜色、图像、边框和阴影等。
  5. Composite(渲染层合并):按照合理的顺序合并图层然后显示到屏幕上。

利用GPU加速优先使用渲染层合并属性,避免layout,paint。

在这里插入图片描述
从上图可以看出,可以通过改变元素的transform实现移动,伸缩变换而非改变物体的left,top,width,height避免layout,paint。让动画效果更加流畅。

二. GPU是什么?

如何用Chrome devtools进行分析debug?浏览器渲染一个页面大致是按照下面这个步骤执行。获取DOM并将其分割为多个层(RenderLayer),将每个层栅格化,并独立的绘制进位图中,将这些位图作为纹理上传至GPU,复合多个层来生成最终的屏幕图像(终极layer)。

Chrome开启查看renderlayer

在这里插入图片描述

  • 黄色边框:有动画3d变换的元素,表示放到了一个新的复合层(composited layer)中渲染。

  • 蓝色的栅格:这些分块可以看作是比层更低一级的单位,这些区域就是RenderLayer

打开一个页面,如果该页面的黄色边框很多,那么肯定要查看一下原因了

Chrome查看layer

打开timeline进行录制,选中timeline的某一帧,然后选择下面的layer,可以左右拖动该模块出现3d。

我们可以看到一个页面实际是像下面一样组成的
在这里插入图片描述
从上图不难理解,虽然我们最终在浏览器上看到的只是一个复印版,即最终只有一个层。类似于PhotoShop软件中的“图层”概念,最后合并所有可视图层,输出一张图片到屏幕上。但实际上一些dom会因为一些规则被提升成独立的层(开启GPU加速),一旦被独立出来之后,便不会再影响其他dom的布局,因为它改变之后,只是“贴上”了页面。

根据这个优点,我们可以把页面中一些布局经常变换的dom(动画)提升到独立的层。那么,浏览器在之后的16ms中,只需进行下面的几个步骤。

三. 如何开启GPU加速?

目前下面这些因素都会引起Chrome创建合成层:

  1. 3D或透视变换(perspective,transform) CSS属性

  2. 使用加速视频解码的video元素

  3. 拥有3D (WebGL)上下文或加速的2D上下文的canvas元素

  4. 混合插件(如Flash)

  5. 对自己的opacity做CSS动画或使用一个动画webkit变换的元素

  6. 拥有加速CSS过滤器的元素

  7. 元素A有一个z-index比自己小的元素B,且元素B是一个合成层(换句话说就是该元素在复合层上面渲染),则元素A会提升为合成层

上面6点都非常容易理解,在日常开发中,最容易出现问题的是第7点

四. GPU加速隐藏的坑? 隐式合成

隐式合成元素A有一个z-index比自己小的元素B,且元素B是一个合成层(换句话说就是该元素在复合层上面渲染)

拿实际项目举个栗子,我们按照上面的步骤开启layer borders
在这里插入图片描述
尚未给上图右手添加高层级的z-index时,整个页面在移动端打开后闪退。而添加了z-index之后,页面正常显示,不闪退了。

仔细看上面的gif,仅仅改变了z-index,就会改变大批数量的层(黄色边框)

为什么z-index力量这么大?

我们来看一个栗子,B在做动画,理所当然把B提到单独的合成层。减少重绘。
在这里插入图片描述
按照上图,我们遇到一个逻辑问题,元素B应该在单独的合成层上,并且屏幕的最终图像应该在GPU上组成。但是A元素在B元素的顶部,我们没有指定提升A元素自身层级的东西。那么浏览器会做什么?它将强制为元素A创建一个新的合成图层。

这样,A和B都被提升到单独的复合层。

因此,使用GPU加速提升动画性能时,最好给当前动画元素增加一个高一点的z-index属性,人为干扰复合层的排序,可以有效减少Chrome创建不必要的复合层,提升渲染性能。

注意:GPU不仅需要发送渲染层图像到GPU,而且还需存储它们,以便稍后在动画中重用。别盲目创建渲染层,一定要分析其实际性能表现。因为创建渲染层是有代价的,每创建一个新的渲染层,就意味着新的内存分配和更复杂的层的管理。对于使用移动设备的用户来说是很坑的。移动设备没有台式机那么多的内存。过多的GPU加速会引起页面卡顿甚至闪退。

找到layers,点击当前层,在右边查看占用的memory(内存)
在这里插入图片描述


http://chatgpt.dhexx.cn/article/rZCYcIBh.shtml

相关文章

MATLAB使用GPU加速计算

先上结论 1、对于特征值运算eig()函数来说,GPU的加速效果是很明显的 2、如果要求精度不高,采用单精度计算,加速效果更加明显 首先查看自己的电脑是不是支持GPU计算 在matlab的终端中输入: gpuDevice()可以看出我电脑的显卡为N…

了解GPU加速计算

1、什么是GPU加速计算 GPU,又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器,与CPU类似,只不过GPU是专为执行复…

Python GPU加速

Numba:高性能计算的高生产率 在这篇文章中,笔者将向你介绍一个来自Anaconda的Python编译器Numba,它可以在CUDA-capable GPU或多核cpu上编译Python代码。Python通常不是一种编译语言,你可能想知道为什么要使用Python编译器。答案当然是&#x…

关于TensorFlow使用GPU加速

我们在安装tensorflow-gpu后,其运行时我们可以选定使用gpu来进行加速训练,这无疑会帮助我们加快训练脚步。 (注意:当我们的tensorflow-gpu安装后,其默认会使用gpu来训练) 之前博主已经为自己的python环境安装了tensorf…

GPU加速原理

原文:https://blog.csdn.net/weiweigfkd/article/details/23051255 GPU加速技术&原理介绍 1、GPU&CPU GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”。与CPU不同,GPU是专门为处理图形任务而产生的芯片。从这个任务定…

让GPU跑的更快

作为一个cuda爱好者 一定要好好看看 不再让CPU和总线拖后腿:Exafunction让GPU跑的更快!确实只用cpu会卡的一比... 在云服务中使用 GPU 是获得低延迟深度学习推理服务最经济的方式。使用 GPU 的主要瓶颈之一是通过 PCIe 总线在 CPU 和 GPU 内存之间复制…

什么是GPU 加速?

1、什么是GPU加速计算 GPU,又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器,与CPU类似,只不过GPU是专为执行复…

什么是GPU加速

1、什么是GPU加速计算 GPU,又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器,与CPU类似,只不过GPU是专为执行复…

GPU加速原理技术介绍

GPU加速技术&原理介绍 1、GPU&CPU GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”。与CPU不同,GPU是专门为处理图形任务而产生的芯片。从这个任务定位上面来说,不仅仅在计算机的显卡上面,在手机、游戏机等等各种有多媒体处理需求的地方都可以见到…

GPU加速原理浅析及代码实现

GPU加速原理浅析及代码实现 一、CUDA简介二、GPU架构特点三、CUDA线程模型四、CUDA内存模型五、CUDA编程规范**第一个要掌握的编程要点**:**我们怎么写一个能在GPU跑的程序或函数呢?****第二个要掌握的编程要点**:**CPU和GPU间的数据传输怎么…

1129-

标题1-行情概览 标题2-行情图片 标题3-重点分析 WTA原油七点开盘高开高走,导致国内原油跌停板上高开高走,下午一点半不知道什么原因又低开。铁矿收一根4.7%的大阳线。贵金属高开高走

连接mysql报错 errorCode 1129, state HY000, Host ‘xxx‘ is blocked because of many connection errors

springcloud项目启动连接mysql过程中报错. 报错关键信息如下: java.sql.SQLException: null, message from server: "Host 192.168.56.1 is blocked because of many connection errors; unblock with mysqladmin flush-hosts" 错误原因: mysql设定了单个客户端…

Navicat连接MySQL 报错 1129

启动本地项目时,由于nacos设置的数据库账号密码未将本地改为线上,导致数据库连接多次而报错,另外navicat进到该IP的线上库也报错1129,报错信息 Host’123.45.678.99’ is blocked because of many connection errors; unblock wit…

ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:1129)

在使用 requests 爬网站时报错: ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:1129)urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(hostmooc1-1.chaoxing.com, port443): Max retries exceeded with url: /work/ .......requests.ex…

【dfs爆搜】poj 1129 Channel Allocation

1129 -- Channel Allocation (poj.org) 题意: 大致的题意就是给你一张图,给这张图染色,最多能染多少种颜色 思路: 首先要构造状态图,构造完状态图之后对其进行搜索(注意是先有图再有的dfs,而…

#1121

#1121 水题,巧妙暴力,拒绝强行暴力导致TLE; 找条件 你好! 这是你第一次使用 *Markdown编辑器 #include #include #include #include #include #include #include #include #include #include #include #include #inc…

Java-1129

Java8 新特性 速度更快代码更少(lambda、stream)强大的Stream API便于并行最大化减少空指针异常Optional 速度更快:对底层数据结构哈希map的优化 解释说明hashmap基本原理 hashmap本质是一个长度16的数组元素的键值对以key:valu…

如何用管理员权限打开CMD(快捷键)

近期给电脑重新装了win10系统,在使用cmd时发现执行一些命令提示我权限不够,需要管理员权限,有两种常用方法可以使用管理员权限打开cmd命令行: 第一种:搜索cmd应用,然后点击以管理员身份运行 第二种&#x…