<html>
<head>
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href="style.css" rel="stylesheet">
<title>Critical Path</title>
</head>
<body>
<p>Hello <span>web performance</span> students!</p>
<div><img src="awesome-photo.jpg"></div>
</body>
</html>
复制代码
不管是DOM仍是CSSOM,都是要通过Bytes → characters → tokens → nodes → object model这个过程。css
DOM树构建过程:当前节点的全部子节点都构建好后才会去构建当前节点的下一个兄弟节点。html
上述也提到了CSSOM的构建过程,也是树的结构,在最终计算各个节点的样式时,浏览器都会先从该节点的广泛属性(好比body里设置的全局样式)开始,再去应用该节点的具体属性。还有要注意的是,每一个浏览器都有本身默认的样式表,所以不少时候这棵CSSOM树只是对这张默认样式表的部分替换。node
DOM树和CSSOM树合并生成render树web
简单描述这个过程:浏览器
DOM树从根节点开始遍历可见节点,这里之因此强调了“可见”,是由于若是遇到设置了相似display: none;的不可见节点,在render过程当中是会被跳过的(但visibility: hidden; opacity: 0这种仍旧占据空间的节点不会被跳过render),保存各个节点的样式信息及其他节点的从属关系。bash
有了各个节点的样式信息和属性,但不知道各个节点的确切位置和大小,因此要经过布局将样式信息和属性转换为实际可视窗口的相对大小和位置。dom
万事俱备,最后只要将肯定好位置大小的各节点,经过GPU渲染到屏幕的实际像素。布局