视频加载失败

解决Chrome动画 卡顿 的办法

840 字
4 分钟
解决Chrome动画 卡顿 的办法

解决Chrome动画”卡顿”的办法,为动画DOM元素添加CSS3样式

-webkit-transform:transition3d(0,0,0);
//或
-webkit-transform:translateZ(0);
  • 这两个属性都会开启GPU硬件加速模式,从而让览器在渲染动画时从CPU转向GPU;

  • 其实说白了这是一个小伎俩,也可以算是一个Hack,-webkit-transform:transition3d和-webkit-transform,但我们设置值为0后,并没有真正使用3D效果,但浏览器却因此开启了GPU硬件加速模式。

  • 这种GPU硬件加速在当今PC机及移动设备上都已普及,在移动端的性能提升是相当显著地,所以建议大家在做动画时可以尝试一下开启GPU硬件加速。

  • 当然也可以这样开启所有浏览器的GPU硬件加速:

webkit-transform: translateZ(0);
-moz-transform: translateZ(0);
-ms-transform: translateZ(0);
-o-transform: translateZ(0);
transform: translateZ(0);
  • 或者:
webkit-transform: translate3d(0,0,0);
-moz-transform: translate3d(0,0,0);
-ms-transform: translate3d(0,0,0);
-o-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
  • 使用-webkit-transform:transition3d(0,0,0)开启GPU硬件加速的chrome中渲染动画性能明显顺畅了许多

chrome诡异的Bug#

  • 对所有动画DOM元素添加-webkit-transform:transition3d(0,0,0)开启GPU硬件加速之后,又出现了一个chrome诡异的Bug

  • 当你有多个position:absolute;元素添加-webkit-transform:transition3d(0,0,0);开启GPU硬件加速之后,会有几个元素凭空消失

  • 这可能是跟添加-webkit-transform之后chrome尝试使用GPU硬件加速有关系,最后还是要等待Chrome官方更新解决了,当前Chrome版本是33。如果谁发现比较好的解决办法,欢迎提出^_^

如何避免这个问题#

  • 在使用-webkit-transform尝试对很多DOM元素编写3D动画时,尽量不要对这些元素及他们的父元素使用position:absolute/fixed。(其实这种情况很难避免)

  • 临时解决办法是,减少使用-webkit-transform:transition3d(0,0,0)的DOM元素数量,例如从9个减至6个就没有元素消失的现象了。

开启GPU硬件加速可能触发的问题#

  • 通过-webkit-transform:transition3d/translateZ开启GPU硬件加速之后,有些时候可能会导致浏览器频繁闪烁或抖动,可以尝试以下办法解决之:
-webkit-backface-visibility:hidden;
-webkit-perspective:1000;

如何监测动画帧速率#

  • 推荐两种实时监测网页渲染帧速率的方法:
    • 1.Chrome的DevTool中TimeLine的Frame模块
    • 2.地址栏输入”chrome:flags”搜索”fps”,将”FPS计数器”开启,浏览器重启后右上角会实时显示帧速率。

通过-webkit-transform/translateZ开启GPU硬件加速的适用范围#

  • 使用很多大尺寸图片(尤其是PNG24图)进行动画的页面。

  • 页面有很多大尺寸图片并且进行了css缩放处理,页面可以滚动时。

  • 使用background-size:cover设置大尺寸背景图,并且页面可以滚动时。(详见:https://coderwall.com/p/j5udlw)

  • 编写大量DOM元素进行CSS3动画时(transition/transform/keyframes/absTop&Left)

  • 使用很多PNG图片拼接成CSS Sprite时

  • 暂时只有这五种情况,欢迎大家补充

通过开启GPU硬件加速虽然可以提升动画渲染性能或解决一些棘手问题,但使用仍需谨慎,使用前一定要进行严谨的测试,否则它反而会大量占用浏览网页用户的系统资源,尤其是在移动端,肆无忌惮的开启GPU硬件加速会导致大量消耗设备电量,降低电池寿命等问题。#

参考地址:http://blog.bingo929.com/transform-translate3d-translatez-transition-gpu-hardware-acceleration.html

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
解决Chrome动画 卡顿 的办法
https://gaodaxiu-blog.netlify.app/posts/解决Chrome动画”卡顿”的办法/
作者
GaoDaXiu
发布于
2018-08-31
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
GaoDaXiu
Hello, I'm GaoDaXiu.
公告
欢迎来到我的博客!
分类
标签
最新动态
站点统计
文章
76
分类
20
标签
128
总字数
72,109
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Netlify CI
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录