1.1.1.从输入URL到生成DOM树
- 地址栏输入URL,WebKit调用资源加载器加载相应资源;
- 加载器依赖网络模块建立连接,发送请求并接收答复;
- WebKit接收各种网页或者资源数据,其中某些资源可能同步或异步获取;
- 网页交给HTML解析器转变为词语;
- 解释器根据词语构建节点,形成DOM树;
- 如果节点是JavaScript代码,调用JavaScript引擎解释并执行;
- JavaScript代码可能会修改DOM树结构;
- 如果节点依赖其他资源,如图片\css、视频等,调用资源加载器加载它们,但这些是异步加载的,不会阻碍当前DOM树继续创建;如果是JavaScript资源URL(没有标记异步方式),则需要停止当前DOM树创建,直到JavaScript加载并被JavaScript引擎执行后才继续DOM树的创建。
1.1.2.从DOM树到构建WebKit绘图上下文
- CSS文件被CSS解释器解释成内部表示;
- CSS解释器完成工作后,在DOM树上附加样式信息,生成RenderObject树;
- RenderObject节点在创建的同时,WebKit会根据网页层次结构构建RenderLayer树,同时构建一个虚拟绘图上下文。
1.1.3 绘图上下文到最终图像呈现
- 绘图上下文是一个与平台无关的抽象类,它将每个绘图操作桥接到不同的具体实现类,也就是绘图具体实现类;
- 绘图实现类也可能有简单的实现,也可能有复杂的实现,软件渲染、硬件渲染、合成渲染等;
- 绘图实现类将2D图形库或者3D图形库绘制结果保存,交给浏览器界面进行展示。