浏览器渲染原理

175 阅读3分钟

浏览器渲染过程

  1. 根据HTML构建HTML树(DOM)
  2. 根据CSS构建CSS数(CSSOM)
  3. 将两棵数合并成一棵渲染树(render tree)
  4. Layout布局(文档流、盒模型、计算大小和位置)
  5. Paint绘制(把边框颜色、文字颜色、阴影等画出来)
  6. Compose合成(根据层叠关系展示画面)

更新样式的方式

一般使用Javascript来更新样式,例如可以直接使用style属性更改HTML元素的样式,还可以使用classList.add()通过增加类的方式修改HTML元素的样式。

像素管道概念

像素管道关键点包括以下五点。

  1. JavaScript:使用JS实现视觉变化效果
  2. Style(样式计算):根据匹配选择器计算出哪些元素应用哪些CSS规则
  3. Layout(布局):计算元素要占据扽空间大小及其在屏幕扽位置
  4. Paint(绘制):填充像素的过程
  5. Composite(合成):由于页面各部分可能被绘制到多层,因此需要按正确顺序绘制到屏幕上,以便正确渲染页面
根据样式类型扽不同存在三种不同的样式更新过程
  1. Javascript>Style(样式计算)>Layout(布局)>绘制(Paint)>合成(Composite),例如:使用div.remove()
  2. Javascript>Style(样式计算)>绘制(Paint)>合成(Composite),例如:修改背景颜色
  3. Javascript>Style(样式计算)>合成(Composite),例如:使用transform属性
三种不同样式更新过程所对应的属性

所有CSS属性所对应的样式更新过程可以查看网站:CSStriggers

渲染性能优化方法

渲染性能优化方法从像素管道五大关键点,及JavaScript、Style、Layout、Paint和Composite展开,每一个关键点都包含若干优化方法,具体内容如下。

优化JavaScript执行
  1. 使用 requestAnimationFrame 来实现视觉变化
  2. 降低复杂性或使用 Web Worker
  3. 了解 JavaScript 的“帧税”
  4. 避免微优化 JavaScript
缩小样式计算的范围并降低其复杂性
  1. 降低选择器的复杂性
  2. 减少要计算样式的元素数量
  3. 测量样式重新计算的开销
  4. 使用块、元素、修饰符
避免大型、复杂的布局和布局抖动
  1. 尽可能避免布局操作
  2. 使用 flexbox 而不是较早的布局模型
  3. 避免强制同步布局
  4. 避免布局抖动
简化绘制的复杂度、减小绘制区域
  1. 触发布局与绘制
  2. 使用 Chrome DevTools 快速确定绘制瓶颈
  3. 提升移动或淡出的元素
  4. 减少绘制区域
  5. 降低绘制的复杂性
使用仅需合成的属性和管理层计数
  1. 使用 transform 和 opacity 属性更改来实现动画
  2. 提升您打算设置动画的元素
  3. 管理层并避免层数激增
  4. 使用 Chrome DevTools 来了解应用中的层
使输入处理程序去除抖动
  1. 避免长时间运行输入处理程序
  2. 避免在输入处理程序中更改样式

渲染性能优化参考链接

以上仅列举渲染性能优化关键点,更详细内容可以参考链接:谷歌开发者文档/渲染性能