HTML 渲染流程---
注意点
下载==加载的意思,图片加载完成,但渲染需要时间的,
DOM的解析和渲染(显示页面)是两回事。解析就是构建DOM树和css树的过程,
遇到js的时候,会进行现有的DOM和CSS树的渲染,而渲染之前,js之前的css树一定构建完成才行,js后面的css文件无影响。
DOM只是js之上的DOM节点。所以显示的页面是不全的,但是有样式的。Render Tree和DOM Tree不完全对应。
1、DOM碰到css是同时进行加载解析的。css下载不会影响DOM解析,但css的下载和解析会影响DOM的渲染。
这可能也是浏览器的一种优化机制。因为你加载css的时候,可能会修改下面DOM节点的样式,如果css加载不阻塞DOM树渲染的话,那么
完,把可以做的工作做完,然后等你css加载完之后,在根据最终的样式来渲染DOM树,这种做法性能方面确实会比较好一点
2、只有DOM和css,css不会影响dom的创建。如果有js就不一定了
3、css加载会阻塞后面js语句的执行、DOM解析和CSS解析是两个并行的进程,所以这也解释了为什么CSS加载不会阻塞DOM的解析。
然而,由于Render Tree是依赖于DOM Tree和CSSOM Tree的,所以他必须等待到CSSOM Tree构建完成,也就是CSS资源加载完
(或者CSS资源加载失败)后,才能开始渲染。因此,CSS加载是会阻塞Dom的渲染的。
由于js可能会操作之前的Dom节点和css样式,因此浏览器会维持html中css和js的顺序。因此,样式表会在后面的js执行前先加载执行完毕。
所以css 会阻塞后面js的执行。
4、浏览器遇到 <script> 标签时,会触发页面渲染,每次碰到<script>标签时,浏览器都会渲染一次页面。这是基于同样的理由,浏览器不
知道脚本的内容,因而碰到脚本时,只好先渲染页面,确保脚本能获取到最新的DOM元素信息,尽管脚本可能不需要这些信息。
5、虽然在 script 和 link 都放在头部的时候,script 放在 link 之前会好一些,不过需要记住,放在 link 之前的 script 中的代码
逻辑最好不要依赖样式,比如获取 boundingbox 或者颜色之类的操作,否则,代码的执行可能和预期的有差别,因为后面下载的样式可能会
修改你操作的时候的样式。
