欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

输入URL到显示页面发生了什么才会导致浏览器渲染、回流和重绘?

程序员文章站 2022-03-12 09:44:32
服务器端: 1.查找缓存 2.通过DNS服务器将URL转换成IP地址 3.浏览器给服务器发出http请求 4.网站的永久重定向 5.服务器跟踪重定向地址 6.服务器处理...

服务器端:

1.查找缓存

2.通过DNS服务器将URL转换成IP地址

3.浏览器给服务器发出http请求

4.网站的永久重定向

5.服务器跟踪重定向地址

6.服务器处理响应

7.服务器发回响应

浏览器端:

1.下载HTML

2.将HTML解析成Dom Tree

3.将css文件解析成 CSSOM

4.根据Dom树和CSSOM 形成render Tree

5.布局 计算出renderTree的每一个节点的位置

6.渲染 render Tree

在浏览器渲染过程中,会发生回流和重绘。

回流:浏览器回去整个重新渲染。

重绘:当元素的一部分属性发生变化(布局不变,比如颜色改变),会触发重绘。

回流对性能的影响比重绘要大,由定义可知,回流必然引起重绘,不过重绘不一定会引起回流。

引起回流的事情:

1.dom树结构发生变化,比如增加或删除节点。

2.改变边距,尺寸(几何属性)等等

3.获取某些属性(比如getComputedStyle)

4.window.resize()

不过要说明的是,浏览器并不会你每有一个js操作就会去回流重绘,事实上它会维护一个队列,把这些操作放在这个队列里,操作积累到一定数量之后,或者到了一定的时间间隔,它才会执行。

最后,举个栗子

比如 

<!Doctype html>

<html>

<head>

<title>栗子</title>

<link rel="stylesheet" src="style.css">

</head>

<body>

<p id="noShow"></p>

<p id="test">

    <p></p>

    <img src="1.jpg"/>

</p>

</body>

<script src="app.js">

</html>

这个的渲染过程是怎样的呢

浏览器发现link标签,于是发出请求,请求css文件

浏览器继续向下,发现img标签,然后请求img,同时继续向下(浏览器天生异步)

浏览器渲染到某一块时,img请求到了,然后发现布局变了,不得不重新渲染

浏览器请求js文件

假如js文件内容是

document.getElementById('noShow').style.display="none"; //回流+重绘

dodocument.getElementTagName('p').style.color="red";//重绘

dodocument.getElementTagName('p').innerHTML='offer';

最后走到</html>的时候渲染结束

这也解释了我们为什么通常把css放在前面,js放在后面