输入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
    评论
浏览器输入URL显示页面的过程大致可以分为以下几个步骤: 1. DNS解析:浏览器首先解析URL中的域名部分,将其转换为对应的IP地址。它先检查浏览器缓存中是否存在该域名的解析结果,如果没有,就向本地操作系统或者网络中的DNS服务器发送查询请求,获取对应的IP地址。 2. 建立TCP连接:一旦获取到目标服务器的IP地址,浏览器通过TCP/IP协议与服务器建立连接。这个过程中,浏览器与服务器进行三次握手,确保双方能够正常通信。 3. 发送HTTP请求:建立TCP连接后,浏览器发送HTTP请求给服务器。请求中包含了请求行(包括请求方法、URL路径和HTTP协议版本)、请求头(包含一些附加信息,如User-Agent、Cookie等)以及请求体(一般用于POST请求,传递数据)。 4. 服务器处理请求:服务器接收到浏览器发送的HTTP请求后,根据请求的内容进行处理。处理过程可能包括查询数据库、读取文件等一系列操作,最终生成需要返回给浏览器的数据。 5. 接收响应并渲染页面:服务器处理完请求后,将生成的响应数据封装成HTTP响应,并发送给浏览器浏览器接收到响应后,根据响应头中的信息判断响应的内容类型,然后对内容进行解析和渲染。对于HTML页面浏览器解析HTML结构、加载CSS和JavaScript文件,并根据这些文件渲染出最终的页面。 6. 关闭TCP连接:页面渲染完毕后,浏览器关闭与服务器的TCP连接。如果页面中存在其他资源(如图片、样式表、脚本等),浏览器继续发送相应的HTTP请求获取这些资源,并进行相应的渲染。 这就是浏览器输入URL显示页面的基本过程。其中涉及到的具体细节和技术可以更加深入和复杂,但以上步骤概括了整个过程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值