一、浏览器的渲染流程:
二、流程解析:
- 浏览器发送请求之后,服务器或本地缓存返回给浏览器HTML文件,这个时候主要是解析HTML文件并且构建DOM树;
注意:如果构建DOM的时候遇到JS,服务器会去请求下载JS文件,JS文件如果没有其他额外设置,会默认等待CSSOM构建完成,再下载执行JS操作。
因为如果先返回并且解析JS文件是会发生阻塞的,我们不能先执行JS文件
- 在解析HTML文件时,遇到link标签,服务器就去请求CSS文件,等待CSS文件返回完毕,解析CSS文件并且构建CSSOM树;
- CSSOM构建完成之后和DOM树一起绘制成渲染树
注意:渲染树是需要DOM和CSSOM构建完成之后才能构建的。
- 然后根据CSS布局绘制页面。
三、流程图示:
DOM和CSSOM结合构建成渲染树:
四、思考:
1、DOM和CSSOM解析有什么不同
DOM可以部分解析,但是CSSOM不能部分解析,只能一次性全部解析。
如下代码:如果CSSOM先解析body,没有解析或延迟解析后边的div,布局就乱套了,所有CSSOM不能部分解析。
body:{
font-size:32px;
}
body div{
font-size:16px
}
2、JS会阻塞HTML的解析吗?为什么?
JS是会阻塞HTML的解析的,因为JS既可以操作DOM又可以操作CSSOM,如果不等JS下载解析执行完之后再构建DOM,可能会导致网页有些内容出现了又消失。
3、HTML文件或CSS文件是如何被解析成DOM或CSSOM的?
HTML文件和CSS文件的解析大致流程是一样的:
字节先转换成字符,再转化成Token,再转化成节点,最后构建CSSOM