HTML、CSS和JS如何变成页面的?( 三 )


 
那么图层的来源有哪些?
1、拥有层叠上下文属性的元素会被提升为单独的一层
层叠上下文可以使能够使 HTML 元素具有三维的概念,这些 HTML 元素按照自身属性的优先级分布在垂直于这个二维平面的 z 轴上 。哪些元素具有层叠上下文属性?

HTML、CSS和JS如何变成页面的?

文章插图
 
2、需要剪裁的地方会被创建为图层
当我们创建一个有宽度和高度的 div 时,里面的文字内容可能会超出这个区域,这时候渲染引擎会把裁剪文字内容的一部分用于显示在 div 区域,例如
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>div {width: 100px;height: 100px;background: yellow;overflow: auto;}</style></head><body><div>我们经常写`HTML`、`CSS`和`JavaScript`,写好这些之后,我们就会在浏览器中看到页面,那浏览器究竟在这背后做了一些什么事情呢?本篇文章将揭晓答案!了解浏览器的渲染原理是我们在通往更深层次的前端开发中不可缺少的,它可以让我们从更深层次、角度去考虑性能优化等~</div></body></html>复制代码运行结果
HTML、CSS和JS如何变成页面的?

文章插图
 
我们再打开控制台的 layers 看一下效果
HTML、CSS和JS如何变成页面的?

文章插图
 
可以看到渲染引擎为文字部分单独创建了一个图层 。
在布局树中的节点如果拥有对应的图层,这个节点就是一个图层,如果没有,这个节点就属于父节点的图层,如下图:
HTML、CSS和JS如何变成页面的?

文章插图
 
图层绘制创建好图层树后,渲染引擎会绘制图层树中的每个图层 。渲染引擎会将图层绘制分解为很多小的绘制指令,然后将这些指令按照顺序组成待绘制列表,我们可以打开控制台的 layers ,选择 document 层,看一下效果
HTML、CSS和JS如何变成页面的?

文章插图
 
栅格化操作栅格化就是将图块转换位位图,图块是栅格化执行的最小单位 。渲染进程维护了一个栅格化的线程池,所有图块的栅格化都是在线程池内执行的 。
图层绘制列表准备好之后,主线程会把这个绘制列表提交给合成线程,绘制操作由渲染引擎中的合成线程来完成 。
【HTML、CSS和JS如何变成页面的?】合成线程将图层划分为图块,然后合成线程会按照视口(可见区域)附近的图块优先生成位图 。
合成与显示所有的图块都被光栅化后,合成线程会生成一个绘制图块的命令( DrawQuad ),然后将该命令提交给浏览器进程 。浏览器进程里面 viz 组件用来接收 DrawQuad 命令,将其页面内容绘制到内存中,最后将内存显示到屏幕 。这个时候,我们就看到了页面
完善渲染流水线示意图根据上文中描述,我们可以画出这样一张图
HTML、CSS和JS如何变成页面的?

文章插图
 
我还在网上找到了另外一张图
HTML、CSS和JS如何变成页面的?

文章插图
 
这两张图都是描述浏览器的渲染流程的 。




推荐阅读