页面渲染——页面合成(composition)的优化
2016-05-05 15:55
274 查看
合成(composition)意味着将网页中已经绘画好的部分结合在一起,且展示在屏幕上。
坚持使用transform和opacity属性来操作你的动画animation
在有动画的元素上使用
不要为所有元素创建合成器层:layers需要内存和管理
在合成领域有两个换件的因素将影响你的性能:
所需要处理的合成层的数量,动画时你使用的属性。
为了实现上面的效果,你应该坚持使用那些能被合成器直接处理的属性,现在只有两个属性能被合成器直接处理:transform和opacity。
唯一要注意的是,每当在元素上使用transform和opacity的时候都应该在元素独自的合成器层(compositor layer)使用。
为了确保这一点,你必须首先允许元素拥有合成器层。
针对旧的浏览器:
上面的代码将告诉浏览器我要进行动画了,浏览器会做一些准备,例如,创建一个合成器层。
为了节省起见,你可能会使用上面的代码为所有的元素创建合成器层,但是你要知道每一个层都是需要内存和管理的,对于低内存的设备这样做是不好的!所以,不要为那些没有必要的元素创建合成器层。
首先你要开始记录(刷新页面开始记录)记录结束之后,你可以点击单独的帧。单独的帧是在时间和详细信息板块之间,如下:
点击之后在最下面将会展示layer的tab选项
允许你在每一帧上面的layer进行查看
使用上面你可以追踪你有多少的layers。如果你在performance-critical动作(例如scroll和transitions)中耗费太多的时间来合成(你的目标是4-5毫秒),你可以查看你有多少layer,它们为什么被创建以及进行修改。
https://developers.google.com/web/fundamentals/performance/rendering/stick-to-compositor-only-properties-and-manage-layer-count?hl=en
坚持使用transform和opacity属性来操作你的动画animation
在有动画的元素上使用
will-change或
translateZ属性
不要为所有元素创建合成器层:layers需要内存和管理
在合成领域有两个换件的因素将影响你的性能:
所需要处理的合成层的数量,动画时你使用的属性。
动画的改变使用transform和opacity属性。
对像素管道而言最好是避免layout和paint,只需要合成的改变。为了实现上面的效果,你应该坚持使用那些能被合成器直接处理的属性,现在只有两个属性能被合成器直接处理:transform和opacity。
唯一要注意的是,每当在元素上使用transform和opacity的时候都应该在元素独自的合成器层(compositor layer)使用。
为了确保这一点,你必须首先允许元素拥有合成器层。
Note
如果你担心你的动画效果不能直接只使用这两个动画属性,那么检查 FLIP principle 网页,它会告诉你不同的复杂的动画效果怎样通过这两个基本的属性实现。确保你的元素可以拥有合成器层
你应该在你要使用动画的元素上加上以下样式:.moving-element { will-change: transform; }
针对旧的浏览器:
.moving-element { transform: translateZ(0); }
上面的代码将告诉浏览器我要进行动画了,浏览器会做一些准备,例如,创建一个合成器层。
管理layers
It’s perhaps tempting, then, knowing that layers often help performance, to promote all the elements on your page with something like the following:* { will-change: transform; transform: translateZ(0); }
为了节省起见,你可能会使用上面的代码为所有的元素创建合成器层,但是你要知道每一个层都是需要内存和管理的,对于低内存的设备这样做是不好的!所以,不要为那些没有必要的元素创建合成器层。
使用开发者工具了解你的应用中的layers
为了理解你的应用中的所有layer,以及为什么一个元素中有一个layer,你首先要在Timeline上允许Paint,如下:首先你要开始记录(刷新页面开始记录)记录结束之后,你可以点击单独的帧。单独的帧是在时间和详细信息板块之间,如下:
点击之后在最下面将会展示layer的tab选项
允许你在每一帧上面的layer进行查看
使用上面你可以追踪你有多少的layers。如果你在performance-critical动作(例如scroll和transitions)中耗费太多的时间来合成(你的目标是4-5毫秒),你可以查看你有多少layer,它们为什么被创建以及进行修改。
https://developers.google.com/web/fundamentals/performance/rendering/stick-to-compositor-only-properties-and-manage-layer-count?hl=en
相关文章推荐
- 设计模式--单例模式
- springboot log4j2配置
- JAVA泛型简析
- allocator类
- spark读取oracle的
- android内存优化的建议
- Process 2(完成版)
- 什么是事件驱动编程风格?
- Android基础 | 控件基础 | Listview之BaseAdapter①
- (礼拜四log)前端开发,使用jq的.css函数添加属性时!important要注意的问题
- 欢迎使用CSDN-markdown编辑器
- swift开发网络篇—利用NSURLSession 发送GET和POST请求
- CodeForces 659E New Reform (DFS)
- ajax与302响应
- CME-M5系列(二)——快速入门
- C++文件读写详解(ofstream,ifstream,fstream)
- 关于"xampp中mysql中配置问题:Unknown initial character set index '48' received from server错误解决方法"
- synchronized详解
- Android ArrayAdapter使用
- New Reform---cf659E(dfs找环)