前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CSS3强制启用 GPU 加速渲染 CSS3 动画

CSS3强制启用 GPU 加速渲染 CSS3 动画

作者头像
2Broear
发布2024-03-12 09:49:12
1560
发布2024-03-12 09:49:12
举报
文章被收录于专栏:2B博客2B博客

CSS3强制启用 GPU 加速渲染 CSS3 动画

css3 transform:translateZ(0)解决一个存在已久并早已知悉解决方案的渲染问题… 最终,只用了一小段的css代码就解决了

transform: translate(x,y);

在监听滑鼠滚动事件时,判断上下执行相应动画总是会卡顿(帧数很低,不稳定),之前了解过 -webkit-transform: translateZ(0);或者-webkit-transform: translate3d(0,0,0);属性,也就是强制启用gpu 加速渲染动画

代码语言:javascript
复制
  transform:translateZ(0px);
  
  -webkit-transform-style:preserve-3d;
  
  -webkit-transform: translate3d(0,0,0);

这个CSS属性等于告诉了浏览器用GPU来渲染该层,与一般的CPU渲染相比,提升了速度和性能。

层(Layer)的概念

html在浏览器中会被转化为DOM树,DOM树的每一个节点都会转化为RenderObject, 多个RenderObject可能又会对应一个或多个RenderLayer。浏览器渲染的流程如下:

  • 获取 DOM 并将其分割为多个层(RenderLayer)
  • 将每个层栅格化,并独立的绘制进位图中
  • 将这些位图作为纹理上传至 GPU
  • 复合多个层来生成最终的屏幕图像(终极layer)。

这和游戏中的3D渲染类似,虽然我们看到的是一个立体的人物,但这个人物的皮肤是由不同的图片“贴”和“拼”上去的。网页比此还多了一个步骤,虽然最终的网页是由多个位图层合成的,但我们看到的只是一个复印版,最终只有一个层。当然有的层是无法拼合的,比如flash。

总结一下开启gpu加速的一些方法:

  • html5 video(bing首页动态背景使用video的原因之一吧)
  • transition 和 animation(在ipad上使用会开启gpu加速)
  • -webkit-transform-style:preserve-3d; -webkit-transform: translate3d(0,0,0);
  • 给元素transform加上translateZ(0px),iScroll采用的方法

按照上述方法开启gpu加速后,涉及到的区域就会被gpu直接渲染在屏幕对应区域,不用和浏览器进程共享内存和减轻cpu负担是gpu加速的理论原理。

开启gpu加速带来的问题:

gpu也开始工作,设备耗电量增加。

会出现一些渲染上面的问题:被加速部分元素z-index值和未被加速部分之间将无法正常比较。

被加速元素如果有position定位的子元素,这些子元素有可能无法渲染到被加速元素以外的区域——left设置成-10000px都会渲染成0px;

pc上有些显卡还会出现渲染bug

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-06-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CSS3强制启用 GPU 加速渲染 CSS3 动画
    • transform: translate(x,y);
      • 层(Layer)的概念
      • 开启gpu加速带来的问题:
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档