输入URL到显示页面发生了什么&浏览器渲染&回流和重绘

服务器端:

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>

<div id="noShow"></div>

<div id="test">

    <p></p>

    <img src="1.jpg"/>

</div>

</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放在后面


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值