浏览器是如何获取`html、css`文件并渲染展示的

225 阅读2分钟

浏览器如何加载CSS

1.当浏览器获得一个html页面时,会“自上而下”加载解析,解析完成之后会生成DOM TREE

DOM树由DOM元素和属性节点组成。DOM是文档对象模型(Document Object Model)的缩写,是HTML文档的对象表示形式。

我们通过一个html文件来具体分析

xml
复制代码
<html>
    <head>
        <meta charset="UTF-8" />
        <title>how css works</title>
        <style>
            h1 {
                color: red;
            }
            p {
                margin-top: 20px;
            }
        </style>
    </head>
    <body>
        <div>
            <h1>Hello World</h1>
            <p>This is a test</p>
        </div>
    </body>
</html>

他的DOM Tree就大致如下图所示:

image.png

2.上面构建了DOM树,但没有包含节点的样式信息。但是浏览器时无法直接理解css代码的,所以会先通过css文件转化为浏览器可以理解的cssom树。

注意,DOM Tree与CSSOM Tree并没有严格的先后生成顺序,浏览器在构建 DOM 树的同时,如果样式也加载完成了,那么 CSSOM 树也会同步构建

我们写一点CSS代码,看会生成怎样的CSSOM树。

css
复制代码
h1 {
    color: red;
}
p {
    margin-top: 20px;
}

对应的树结构:

image.png 3.接下来便是构建渲染树,使可见的元素得以被渲染在网页上。

那为什么要构建渲染树呢?在上面的示例中可以看到,DOM树可能包含一些不可见的元素,比如head标签,使用display:none;属性的元素等。所以在显示页面之前,还要额外地构建一棵只包含可见元素的渲染树。

image.png

4.接下来便是根据渲染树进行页面元素的布局(对渲染树进行分层,生成分层树,类似于ps,生成一个个图层),然后合成绘制成一个完整页面。

5.接下来对于网页的修改会引发网页的重排与重绘。简单来说就是,涉及到DOM树中元素几何尺寸的变化会引发重排,这种方式开销比较大。其他不影响集合尺寸例如修改颜色会引发重绘,执行效率相对高些。