页面渲染——简化paint复杂程度和区域
Paint是填充像素并且最后合成在用户的屏幕上的过程。
通常是在管道中耗费最大的,你要尽可能的避免使用paint。
- 动画中使用除了transform和opacity的动画属性都将触发paint
- paint是像素管道中耗费最大的部分,所以避免使用之
- 在层提升(layer promotion)和编配动画的时候减少layer区域
- 使用Chrom DevTools的paint模块来计算paint的复杂度和耗费:减少你能减少的
如果你触发了layout你就一定触发了paint,因为改变元素的几何形状意味着元素的像素需要修改。

你可以触发paint如果你改变了不是几何性质的属性,例如background,text color,亦或shadow。
在这些情况下layout将不会被触发,管道看上去像下面这样:

使用 Chrome DevTools 快速检测paint瓶颈
在chrome DevTools中的console栏目选中rendering,勾选show paint rectangels

注意上面的钩钩选择之后将会导致chrome将会捕捉paint发生的地方,并用绿色表示。
如果有些地方你认为不应该发生paint,那么你可以深入优化。

当你想获得paint的更多信息,你可以在Timeline中选择paint,记住只有选择paint之后浏览器才能记录相关信息,否则将不会检测paint。

现在,你需要做recording。recording结束之后选择一帧,在下面的summary中点击paint profiler,如下图:

点击之后你可以看见哪里被paint了,这个paint花费了多长时间和这个paint调用的individual paint 。

上面检测方法让你同时检测了paint的复杂度和paint的区域。
你可以根据结果来优化。
对需要移动和消退的元素进行提升(promote)
paint不总是在在内存中paint成一张image。事实上,浏览器paint成多张image,亦或多张合成器层(compositor layers),如果有必要的话。

好处是元素被再次paint亦或在屏幕上使用transform属性进行移动时,可以不影响其他元素。
这就像绘画软件Sketch,GIMP亦或Photoshop,一个层中进行的操作不会影响另一个层,所有的层一个接着一个相互结合并创建除了最后的图片。
创建新的层的最好方式是使用css属性 will-change 。 在Chrome和Opera和Firefox浏览器中起作用,并且因为will-change属性值transform,将会创建一个新的构造器层。
.moving-element {
will-change: transform;
}
对于不支持will-change属性的浏览器,但是为了创建layer,所以你必须(误)用3D transform来强迫创建一个新的layer,适用于Safari和Mobile Safari等。
.moving-element {
transform: translateZ(0);
}
注意不要创建太多的layer,因为一个layer既占内存也需要管理。如果你提升了元素(promote a element)来创建新的层,使用DevTools来确定这样做将会给你一个性能上的提升。
不要不进行检测就直接提升元素。
减少paint区域
对paint而言巨大的挑战就是浏览器将两个需要paint的元素结合在一起,而且这将会导致整个屏幕被重新paint。
所以,尽可能减少paint区域。
简化paint的复杂度
当谈到paint的时候,有些行为消耗很大。
比如,任何包含模糊效果(例如一个阴影)代码将会比画一个红色的box花费更长时间。
css中的background:red和box-shadow:0,4px,4px,rgba(0,0,0,0.5)在执行上对性能有很大不同的影响。

上面paint profiler允许你决定你为了达到最终相同的结果,你是否需要替换已有方案来达到最优性能:你要在动画中尽量变paint操作,且每一帧的paint都会大于10ms,特别是在移动手机上将会耗时更多。
页面渲染——简化paint复杂程度和区域的更多相关文章
- 【前端性能】高性能滚动 scroll 及页面渲染优化
最近在研究页面渲染及web动画的性能问题,以及拜读<CSS SECRET>(CSS揭秘)这本大作. 本文主要想谈谈页面优化之滚动优化. 主要内容包括了为何需要优化滚动事件,滚动与页面渲染的 ...
- 【前端性能】高性能滚动 scroll 及页面渲染优化--转发
本文主要想谈谈页面优化之滚动优化. 主要内容包括了为何需要优化滚动事件,滚动与页面渲染的关系,节流与防抖,pointer-events:none 优化滚动.因为本文涉及了很多很多基础,可以对照上面的知 ...
- 高性能滚动 scroll 及页面渲染优化
最近在研究页面渲染及web动画的性能问题,以及拜读<CSS SECRET>(CSS揭秘)这本大作. 本文主要想谈谈页面优化之滚动优化. 主要内容包括了为何需要优化滚动事件,滚动与页面渲染的 ...
- 前端高性能滚动 scroll 及页面渲染优化
前言 最近在研究页面渲染及web动画的性能问题,以及拜读<CSS SECRET>(CSS揭秘)这本大作.本文主要想谈谈页面优化之滚动优化. 主要内容包括了为何需要优化滚动事件,滚动与页面渲 ...
- 多进程浏览器、多线程页面渲染与js的单线程
线程与进程 说到单线程,就得从操作系统进程开始说起.在早期的操作系统中并没有线程的概念,进程是能拥有资源和独立运行的最小单位,也是程序执行的最小单位.任务调度采用的是时间片轮转的抢占式调度方式,而进程 ...
- JS学习笔记:(一)浏览器页面渲染机制
浏览器的内核主要分为渲染引擎和JS引擎.目前市面上常见的浏览器内核可以分为这四种:Trident(IE).Gecko(火狐).Blink(Chrome.Opera).Webkit(Safari).这里 ...
- 加载 CSS 时不影响页面渲染
转自:http://www.oschina.net/translate/loading-css-without-blocking-render 本文展示了一种技术,它能通过异步下载样式表,以阻止它们的 ...
- 我是怎么发现并解决项目页面渲染效率问题的(IE调试工具探查器的使用)
#我是怎么发现并解决项目页面渲染效率问题的(IE调试工具探查器的使用) ##背景 之前的项目中,有很多的登记页面,一般都有100-200甚至更加多的字段,而且还涉及到字典.日期及其他效果的显示,载入时 ...
- 微信小程序--ajax服务器交互及页面渲染
网上找的帖子大多是直接在onload中请求数据.而我想实现的是点击按钮,然后请求服务器,接着返回数据,前端页面渲染.所以搞了挺久的,在此记录一下. 请求是按照微信官方给出的,wx.request 在这 ...
随机推荐
- 深入理解Activity启动流程(四)–Activity Task的调度算法
本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 深入理解Activity启动流程(一)--Activity启动的概要流程 深入理解Activity启动流程(二)- ...
- [zlib]_[0基础]_[使用Zlib完整解压zip内容]
场景: 1. 解压文件一般用在下载了一个zip文件之后解压,或者分析某个文件须要解压的操作上. 2. 解压文件,特别是解压带目录的zip文件往往系统没有提供这类Win32 API,当然C#自带库能解压 ...
- hdu5379||2015多校联合第7场1011 树形统计
pid=5379">http://acm.hdu.edu.cn/showproblem.php? pid=5379 Problem Description Little sun is ...
- iOS加急审核之2015年总结
就在今天到公司的一会,查看了一下邮件,收到Apple的回复,今年的第六次加急审核通过了. 然后,想想明天就是西方的圣诞节假期了,从22日到29日的这段时间,Apple会暂时关闭iTunesconnec ...
- JobClient
/** * <code>JobClient</code> is the primary interface for the user-job to interact * wit ...
- Web框架Django(二)
一.Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层 ...
- 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制
你所不知道的库存超限做法 在互联网企业中,限购的做法,多种多样,有的别出心裁,有的因循守旧,但是种种做法皆想达到的目的,无外乎几种,商品卖的完,系统抗的住,库存不超限.虽然短短数语,却有着说不完,道不 ...
- VS中 build,rebuild,clean
一般来说Rebuild=99%*(Clean+Build),效果在非常小的可能性下会不同,一般可以忽略. Rebuild是对Solution下的所有项目,逐个进行 Clean+Build.不论文件更改 ...
- 手机pc显示不同的内容
<script type="text/javascript"> // var txt = $('#sjyincang').html(); // alert(txt); ...
- 使用sed来自动注释/恢复crontab中的一个任务
# 注释crontab任务crontab -l > ${WORK_DIR}/cron_binarysed -i 's%\(.*/home/xyz/xyz.sh\)%#\1%' ${WORK ...