利用GPU渲染加速CSS动画

“Lift not the painted veil which those who live

Call Life: though unreal shapes be pictured there,

And it but mimic all we would believe”

每个网页或多或少都涉及到一些CSS动画 通常简单的动画对于性能的影响微乎其微 然而如果涉及到稍显复杂的动画 不当的处理方式会使性能问题变得十分突出 几个礼拜前在公司做了个presentation 标题是Faster Animation with GPU accelerated CSS本文是对此的文字总结

之前参与过的两个项目里都要求用原生JS去实现对于网页中某个元素的位置进行持续而频繁的改变 我遇到的问题是动画的卡顿甚至停滞 搜寻了很久解决方法 甚至比对了我的代码和Github上完成相同功能的插件代码的差异 最后通过改变几个CSS属性很大程度上改善了动画

我们都知道 如果要在一个页面上移动一个现有的元素 通常有四种方法 比如说改变元素的margin而这几种方法的性能各异 通过测试不难看出 给元素的transform属性设置translate3d(x,y,z)是最快的方法

这其实和网页的渲染过程有关transform: translate3d(x,y,z)这一行代码使得GPU去渲染动画主体所在的层 而并非CPU 所以一定程度上提高了动画的速度 各大浏览器对于GPU渲染过程并没有一个清晰明了的概念 于是我参照了唯一较为详细叙述整个流程的一篇文章GPU accelerated compositing in chrome

网页渲染过程

关于Chrome浏览器渲染网页的过程及其与GPU的关系 可以总结出以下三点:

    DOM中的每个节点都直接或间接地对应一个层

    一些层有自己的支撑平面(backing surface) 这些层被称为复合层(compositing layers)

    对于复合层(compositing layers)来说compositor是利用GPU将它最终渲染到屏幕上的

复合层形成条件

而形成由GPU渲染的复合层(compositing layers) 需要满足以下条件之一:

    这个层对应的元素里有<canvas>

    这个层里的元素使用了CSS动画去改变透明度或者使用了-webkit-transform属性

    这个层里的元素使用了CSSfilter

Tips

对于那些即将参与CSS动画的HTML元素 可以加上will-change这个属性 使浏览器提前有所准备 但是注意不能滥用

当需要不断改变一个元素的位置时 最好的方式是使用transform: translate3d(x,y,z)

我们还可以参照csstriggers这个网站去查看我们使用的单个的CSS属性会给浏览器带来哪些工作量

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,695评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,569评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,130评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,648评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,655评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,268评论 1 309
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,835评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,740评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,286评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,375评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,505评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,185评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,873评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,357评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,466评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,921评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,515评论 2 359

推荐阅读更多精彩内容

  • 译者序:原文GPU Animation: Doing It Right,发表于2016年12月6日,本文是对该篇的...
    smilewalker阅读 1,613评论 0 8
  • 最近看到一篇关于GPU动画的神文,原文地址:https://www.smashingmagazine.com/20...
    purple_force阅读 3,453评论 1 6
  • CSS3动画应用很广,尤其是在H5项目中,炫酷的交互效果可以给产品带来更好的体验,更能吸引用户。然而在应用的时候,...
    UIleader阅读 2,222评论 0 7
  • 看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印象,因...
    DCbryant阅读 1,868评论 0 4
  • 试想一下,你刚生了孩子,在病床躺着,先生想给你煮碗鸡汤,这才发现燃气打不燃,自己从未学过点火生炉子,进而把门把手什...
    月如悠尘阅读 546评论 8 3