前端面试宝典

这篇我给你整理成一页纸终极背诵稿,面试遇到浏览器渲染 / 重排重绘 / 性能优化,直接照着背,稳拿满分。

浏览器渲染原理 · 面试终极版

一、完整渲染流程(必背)

  1. 解析 HTML,生成 DOM 树
  2. 解析 CSS,生成 CSSOM 树
  3. DOM + CSSOM 合并,生成 渲染树(RenderTree)
  4. 重排(Layout/Reflow):计算元素位置、大小
  5. 重绘(Paint):绘制元素颜色、背景、样式
  6. 合成(Composite):图层交给 GPU,合成显示到屏幕

二、重排、重绘、合成 核心区别

1. 重排(Reflow/Layout)

  • 定义:元素几何信息变化,浏览器重新计算布局
  • 触发:宽高、位置、边距、增删DOM、窗口resize
  • 开销最大,会影响父元素、子元素、兄弟元素
  • 结论:重排 一定会触发 重绘

2. 重绘(Repaint)

  • 定义:元素外观变化,但位置大小不变
  • 触发:颜色、背景色、阴影、visibility
  • 开销:中等
  • 结论:重绘 不会触发 重排

3. 合成(Composite)

  • 定义:GPU 对图层做位移、变形、透明度混合
  • 触发transformopacity
  • 开销最小,GPU 加速,丝滑不卡顿
  • 结论既不重排,也不重绘

三、性能开销排序(张口就来)

重排 >>> 重绘 >>> 合成


四、高频考点:哪些属性触发什么?

  • 触发重排:width、height、margin、padding、left、top、font-size、display、position、float
  • 只触发重绘:color、background-color、box-shadow、border-color、visibility
  • 只走合成:transform、opacity

五、如何减少重排重绘?(标准答案)

  1. 动画优先使用 transform、opacity
  2. 批量修改 DOM,使用 DocumentFragment
  3. 避免频繁读取布局属性(offsetWidth、clientTop 等)
  4. 使用 will-change 提前提升图层
  5. 尽量用 CSS 动画,少用 JS 频繁修改样式
  6. 避免层级过多,防止图层爆炸

六、30 秒口述总结(面试满分版)

浏览器先解析 HTML 和 CSS 生成 DOM 与 CSSOM,合并成渲染树,
然后经过重排计算位置大小、重绘绘制样式、合成图层显示
重排开销最大,重绘次之,transform 和 opacity 只走合成,性能最优
优化核心:能合成不重绘,能重绘不重排


这一套背熟,面试官不管怎么问:

  • 输入 URL 到页面展示
  • 重排重绘是什么
  • 合成层做了什么
  • 如何做性能优化