WebKit06-WebKit网页加载和渲染过程

232 阅读2分钟

「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战」。

前言

浏览器的主要作用就是将用户输入的URL转变为可视化的视图。

这部分包含三个内容

第一部分:网页加载,将URL构建为DOM树

第二部分:网页渲染,从DOM生成可视化图像

第三部分: 绘制上下文生成可视化对象

网页加载

页面输入网页后会经历以下过程:

image.png

上面的过程是:

1、当用户输入网页URL的时候,WebKit调用其资源加载器加载该URL对应的网页。

2、加载器依赖网络模块建立连接,发送请求并接收答复。

3、WebKit接收到各种同步或者异步的网页、资源的数据

4、网页交给HTML解释器转变为一些列的词语(Token)

5、解释器根据词语构建节点(Node),形成DOM树

6、JS代码调用JS解释器执行

7、JS代码对DOM树修改的处理

8、节点依赖的其他比如图片、CSS、视频等,调用资源加载器来进行加载(此处异步)。如果是JS资源,则根据标记来进行同步或者异步的加载,未标记默认同步阻塞加载。

网页渲染

这部分是,利用CSS和DOM树构建RenderObject树:

image.png

这部分过程为:

1、CSS文件被CSS解释器解释为内部表示结构

2、CSS解释器工作完毕,在DOM树上附加解释后的 样式信息,这就是RenderObject树

3、RenderObject节点在创建的同时,WebKit会根据网页层次结构构件RenderLayer树,同时创建一个虚拟的绘制上下文,其实这中间还有复杂的内部过程,后面拆开详解

4、 最终进行上下文绘制

生成可视化图像

最后一部分是生成可视化图像,需要依赖2D、3D图形库

image.png

这部分的过程是:

1、绘制上下文是一个与平台无关的抽象,它将每个绘图操作桥接到不同的具体实现类。

2、绘图实现类可能有简单的实现,也可能有复杂的实现。Chromium中会使用合成器来完成复杂的多进程和GPU加速机制。

3、绘图实现类将2D图形库或者3D图形库绘制的结果保存下来,交给浏览器来一起展示。

实际中的绘制上下文可能没有描述的这么简单,现代浏览器为了绘图上的高效和安全性,kennel会在这一过程中引入复杂的机制。并且绘图渲染也从之前单纯的软件渲染,到现在GPU硬件渲染、混合渲染等方式。