美文网首页面经
html网页的的加载和渲染过程(webkit内核)

html网页的的加载和渲染过程(webkit内核)

作者: 桃子Lisa | 来源:发表于2018-06-01 10:13 被阅读20次

    一个网址从url到页面图像一般分为两个过程:

    1. 网页加载过程:从URL到构建DOM树

    2. 网页渲染过程:从DOM树到页面图像

    整个过程大致流程和参与的模块如下所示:

    参考朱永盛的《webkit技术内幕》图1-5

    从url到dom树的过程如下所示

    参考朱永盛的《webkit技术内幕》图2-6

    步骤详解如下:

    1.当用户输入网页url的时候,webkit调用资源加载器加载该url对应的网页

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

    3.webkit接收到各种网页或者资源的数据,其中某些资源可能是同步或异步获取的

    4.网页被交给html解释器转换成一系列的词语

    5.解释器根据词语创建节点,形成dom树

    6.如果节点是javascript代码的话,调用JavaScript解释器并执行(JavaScript代码可能会修改DOM树的结构)

    7.如果节点依赖其他资源如图片,视频等,调用资源加载器来加载他们,但这些请求是异步的,不会阻塞当前DOM树的继续创建。但是,如果是JavaScript资源,则当前DOM树停止创建,知道对应的JavaScript资源被加载并被执行后才继续创建。

    8.在上述过程中,网页会发出DOMContent和onload事件。DOMContent事件是在DOM树创建完之后,onload事件是在DOM树创建完且网页所依赖的资源都加载完后发生。

    页面渲染过程

    页面渲染过程指webkit利用css和dom树构建renderObject树直到绘图上下文,大体过程如下

    来自朱永盛《webkit技术内幕》图2-7

    1.CSS文件被解释器解释成内部表示结构

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

    3.RenderObject节点在创建的同时,Webkit会根据网页的层次结构创建RenderLayer树,同时构建一个虚拟的绘图上下文。

    4.在网页存续期间:DOM树,RenderObject树,RenderLayer树,绘图上下文一直都会存在,直到网页被销毁。

    5. 最后根据绘图上下文生产最终的图像,这一过程主要依赖2D和3D图形库

    来自朱永盛《webkit技术内幕》图2-8

    在看chrome渲染的时候,发现页面一共有3个事件点,first paint,DOMContentLoaded,onLoad。fisrt paint就是所谓的首屏时间,以下文章很好的解释了为什么css要在head里面,js要放在body最后的原因。

    参考文章 https://www.cnblogs.com/hongrunhui/p/8929001.html  (first pain讲的很详细)

    FP发生在body中第一个script脚本之前的CSS解析和JS执行完成之后。换句话说就是第一脚本之前的DOM和CSSOM准备就绪之后,便会着手渲染第一脚本前的内容。

    first pain有时候在load事件之后(比如没有图片视频等资源的,只有css,js资源的),有的在contentLoaded之前,比如百度首页(资源众多)

    first paint一定在html文件加载完之后,要不然CSSOM不能准备好,就不会开始渲染

    相关文章

      网友评论

        本文标题:html网页的的加载和渲染过程(webkit内核)

        本文链接:https://www.haomeiwen.com/subject/agvqsftx.html