浅析Chrome的渲染流程(下)

本文深入解析Chrome渲染流程,包括分层、图层绘制、栅格化操作和合成显示。浏览器将页面元素生成图层树,通过绘制指令形成待绘制列表,然后进行栅格化生成位图,最后合成并显示在屏幕上。理解这一过程有助于优化网页性能。
摘要由CSDN通过智能技术生成

在浅析Chrome的渲染流程(上)中我们介绍了渲染流水线中的 DOM生成样式计算布局 三个阶段。今天我们来讲下渲染流水线后面的阶段。

分层

经过生成布局之后生成的布局树,将每个元素的具体位置信息都计算出来了,那么接下来是不是开始着手绘制页面了?

答案依然是否定的。

因为页面中有很多复杂的效果,比如一些复杂的3D变换、页面滚动,或者使用z-indexing做z轴排序等。为了更加方便地实现这些效果,渲染引擎还需要为特定的节点生成专用的图层,并生成一棵对应的图层树(LayerThree)。提到图层,大家最先应该想到的是PS软件。PS中图层是很常见的,比如将图片背景变成透明的,就需要先复制一个图层出来后,用滤棒清除掉图层中不需要的部分,然后应用到原始图像上,就可以生成一个具有透明背景的图片了。

要想直观地理解什么是图层,可以通过Chrome的 “开发者工具”,选择 “Layers” 标签,就可以可视化页面的分层情况,如下图:

在这里插入图片描述
如果找不到 “Layers” 这个标签,请参考下图:
在这里插入图片描述
从上面的第一张图可以看出,渲染引擎给页面分了很多图层,这些图层按照一定的顺序折叠加在一起,就形成了最终的页面。

现在你知道了浏览器的页面实际上被分成了很多图层,这些图层叠加后合成了最终的页面。那么这些图层和布局树节点的之间的关系是什么样子呢?请参考下图:
在这里插入图片描述
通常情况下,并不是布局树的每个节点都包含一个图层,如果一个节点没有对应的图层,那么这个节点就从属于父节点的图层。比如上图中的span标签就没有专属图层,那么它们就从属于它们的父节点图层。但不管怎样,最终每个节点都会直接或间接地从属一个层。

浏览器对于满足以下情况的节点会单独创建一个图层:

1.拥有层叠上下文属性的元素会被提升为单独的一个层。

页面是个二维平面,但是层叠上下文能够让HTML元素具有三维概念,这些HTML元素按照自身属性的优先级分布在垂直于这个二维平面的z轴上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值