浏览器的关键渲染路径
浏览器从输入url到页面展示,中间发生了什么
DNS
解析:将域名解析成IP
地址TCP
连接:TCP 三次握手- 发送
HTTP
请求 - 服务器处理请求并返回
HTTP
报文 - 浏览器解析渲染页面(如何渲染)
- 构建dom文档对象
- 获取外部资源
- 构建css文档对象
- 执行
javascript
,启动事件循环 - 合并dom,css文档对象,生成渲染树
- 计算布局和绘制(触发重绘和回流)
- 断开连接:TCP 四次挥手
load
事件和DOMConentLoaded
事件的区别
load
事件指dom、css、js、图片等资源全部加载完成DOMConentLoaded
指dom元素加载完成,其他资源不一定加载完成
图层
通常渲染dom时只有一个图层,但当满足特定情况时,会渲染多个图层
渲染DOM时的实际情况
- 获取dom后查看是否需要分割为多个图层
- 对每个图层的元素计算样式结果(Recalculate style)
- 为每个元素生成图形和位置(Layout--重排,回流)
- 将元素绘制填充到图层位图中(Paint--重绘)
- 图层作为纹理提交给gpu,gpu组合图层渲染到页面
创建新图层的条件
- 具有3D变换的CSS属性:
transform:translateZ(0)
video
、canvas
元素iframe
元素css animation
元素- 拥有css加速属性的元素:
will-change
调试工具查看图层
- more tools
- layouts
重绘和重排(回流)
- 重绘:当一个元素的布局不变,外观发生改变时
- 回流:当改变一个页面的布局时就会发生回流,在获取某些属性时也会触发重排
减少重绘和重排:
- 减少DOM操作,多次使用时缓存DOM元素
- 减少获取某些属性,将他们缓存起来使用
- 使用动画时,使元素脱离文档流
- 使用css3硬件加速,下列属性将触发硬件加速
- transform
- opacity
- filters
- will-change