美文网首页
重绘 回流 以及浏览器解析URL和渲染整个页面

重绘 回流 以及浏览器解析URL和渲染整个页面

作者: 江疏影子 | 来源:发表于2019-03-13 22:05 被阅读0次

    前言

    在文档重新加载的时候,浏览器引擎会解析html来生成dom树,之后根据DOM元素的几何属性构建一棵用于渲染的树。渲染树的每个节点都有大小和边距等属性,类似于盒子模型(由于隐藏元素不需要显示,渲染树中并不包含DOM树中隐藏的元素)。当渲染树构建完成后,浏览器就可以将元素放置到正确的位置了,再根据渲染树节点的样式属性绘制出页面。由于浏览器的流布局,对渲染树的计算通常只需要遍历一次就可以完成。

    重绘(repaint)

    当元素样式的改变不影响布局时,浏览器将使用重绘对元素进行更新,此时由于只需要 UI 层面的重新像素绘制,因此损耗较少。

    常见的浏览器重绘操作:改变元素颜色 改变元素背景色 改变visibility/outline

    回流(reflow)

    又叫重排(layout)。当元素的尺寸、结构或者触发某些属性时,浏览器会重新渲染页面,称为回流。此时,浏览器需要重新经过计算,计算后还需要重新页面布局,因此是较重的操作。

    常见的浏览器回流操作:页面初次渲染 浏览器窗口大小改变 元素尺寸/位置/内容发生改变 元素字体大小变化 添加或者删除可见的 DOM 元素 激活 CSS 伪类(:hover……)
    重点:回流必定会触发重绘,重绘不一定会触发回流。重绘的开销较小,回流的代价较高。*
    想清楚了以上的两个概念,在前端中为什么要使用防抖(debounce)节流(throttle)就显得格外的重要。

    这张图就能很好的说明重绘和回流以及防抖和节流的总要性
    那么,在工作中我们要如何避免大量使用重绘与回流呢?:
    1.避免频繁操作样式,可汇总后统一一次修改
    2.尽量使用class进行样式修改,而不是直接操作样式
    3.减少 DOM 的操作,可使用字符串一次性插入

    浏览器解析URL

    1.用户输入 URL 地址。
    2.对 URL 地址进行 DNS 域名解析成ip地址。
    3.建立 TCP 连接(三次握手)
    4.浏览器发起 HTTP 请求报文。
    5.服务器返回 HTTP 响应报文。
    6.关闭 TCP 连接(四次挥手)
    7.浏览器解析文档资源并渲染页面。

    image.png
    什么是DNS域名解析?

    DNS(Domain Name System)是 域名系统 的英文缩写,提供的服务是用于将主机名和域名转换为 IP 地址的工作

    1. 浏览器根据地址,在 自身 的缓存中查找DNS(域名服务器)的解析记录,如果有则直接返回 IP 地址。如果没有,则查找 操作系统中host文件 的DNS解析记录,如果有也就直接返回IP地址。
    2. 如果在1的条件上(自身缓存没有,操作系统host文件也没有解析记录),则直接向该 域名服务器 发起请求解析这个域名。
    3. 先向 本地域名服务器 中请求,让它解析这个域名,如果解析不了,则向 根域名服务器 请求解析。
    4. 根服务器本地域名服务器 返回一个 主域名服务器
    5. 本地域名服务器主域名服务器 发起解析请求。
    6. 主域名服务器 接收到解析请求后,查找并返回域名对应的域名服务器的地址。
    7. 域名服务器会查询存储的域名和 IP 的 映射关系表 ,返回 目标 IP 记录 以及一个 TTL(Time To Live)值
    8. 本地域名服务器接收到 IPTTL 值,进行缓存,缓存的时间由 TTL 值控制。
    9. 将解析的结果返回给用户,用户根据 TTL 值 缓存本地系统 缓存中,域名解析过程结束。
      更详细的解释:https://juejin.im/post/5c88b8f7518825068d1d1d7e#heading-0
      image.png
    TCP三次握手

    TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。简单来说,它的作用就是将数据流从一台主机可靠地传输到另一台主机。

    1. 第一次握手:起初两端都处于 CLOSED 关闭状态,Client 将标志位 SYN 置为 1,随机产生一个值 seq = x,并将该数据包发送给 ServerClient 进入 SYN-SENT 状态,等待 Server确认。
    2. 第二次握手:Server 收到数据包后由标志位SYN = 1 得知 Client请求建立连接,Server 将标志位 SYNACK 都置为 1,ack = x + 1,随机产生一个值 seq = y,并将该数据包发送给Client以确认连接请求,Server 进入 SYN-RCVD 状态,此时操作系统为该 TCP 连接分配 TCP 缓存和变量。
    3. 第三次握手:Client 收到确认后,检查 seq 是否为 x + 1ACK 是否为 1,如果正确则将标志位 ACK 置为 1,ack = y + 1,并且此时操作系统为该 TCP连接分配 TCP 缓存和变量,并将该数据包发送给 ServerServer 检查 ack 是否为 y + 1ACK 是否为 1,如果正确则连接建立成功,ClientServer 进入 established 状态,完成三次握手,随后 ClientServer 就可以开始传输数据。
      TCP三次握手

    相关文章

      网友评论

          本文标题:重绘 回流 以及浏览器解析URL和渲染整个页面

          本文链接:https://www.haomeiwen.com/subject/kchxmqtx.html