浏览器回流和重绘
回流(Reflow)
当Render Tree中部分或全部元素的尺寸、结构、或某些属性发生改变时,浏览器重新渲染部分或全部文档的过程称为回流。
会导致回流的操作:
- 页面首次渲染
- 浏览器窗口大小发生改变
- 元素尺寸或位置发生改变
- 元素内容变化(文字数量或图片大小等等)
- 元素字体大小变化
- 添加或者删除可见的DOM元素
- 激活CSS伪类(例如::hover)
- 查询某些属性或调用某些方法
一些常用且会导致回流的属性和方法:
- clientWidth、clientHeight、clientTop、clientLeft
- offsetWidth、offsetHeight、offsetTop、offsetLeft
- scrollWidth、scrollHeight、scrollTop、scrollLeft
- scrollIntoView()、scrollIntoViewIfNeeded()
- getComputedStyle()
- getBoundingClientRect()
- scrollTo()
重绘(Repaint)
当页面中元素样式的改变并不影响它在文档流中的位置时(例如:color、background-color、visibility等),浏览器会将新样式赋予给元素并重新绘制它,这个过程称为重绘。
当输入网址后,到网页显示,其间发生了什么
浏览器解析 URL
http://web服务器/目录/../文件- http 访问数据的协议
- // 后面 服务器名称
- 资源路径
对 URL 进行解析之后,浏览器确定了 Web 服务器和文件名,根据这些信息来生成 HTTP 请求消息了
通过 DNS 服务器获取 真实 IP 地址
通过 DNS 获取到 IP 后,就可以把 HTTP 的传输工作交给操作系统中的协议栈,应用程序(浏览器)通过调用 Socket 库
建立链接 TCP 三次握手
服务器 层层解析 把相应数据装在 HTTP 响应报 文里
客户端收到后 交给浏览器去渲染页面
最后,客户端要离开了,向服务器发起了 TCP 四次挥手,至此双方的连接就断开了