前端面试题

浏览器渲染流水线:重排、重绘、合成

讲讲浏览器渲染流水线。哪些CSS触发重排哪些只触发重绘?

为什么面试官会问这道题

性能方向的前端面试会死磕——能答出"transform走GPU"的过,只会说"减少DOM操作"的被筛。

如何回答

  1. 1

    流水线:JS→样式计算(匹配CSS)→布局/重排(几何)→绘制(填像素)→合成(图层上屏)。

  2. 2

    触发重排的属性:width/height/top/left/display/font-size——所有几何相关。贵,还会级联到子元素。

  3. 3

    跳过布局但触发重绘:color/background-color/visibility。相对便宜。

  4. 4

    跳过布局和绘制(只合成):transform/opacity。由合成线程处理——动画首选。

  5. 5

    will-change或translateZ(0)能把元素提升到独立图层——费内存但启用GPU加速。

参考回答示例

流水线从上到下:JS改DOM→样式重算→布局→绘制→合成。改几何属性(width/top/font-size)触发布局,这一步最贵因为会级联。改颜色/可见性触发绘制跳过布局,便宜些。transform/opacity两步都跳——走合成线程,60fps动画就靠它们。实操:动画用`transform: translateX()`而不是`left: Xpx`;批量先读后写避免layout thrashing(每次写都使布局失效,后续读会强制同步布局)。重动画的元素用will-change: transform提升成独立图层。教新人一句话:如果在做位移动画,十有八九你该用transform。

实用技巧

  • Performance面板→Rendering→Layout Shift Regions,直接看实际影响。

  • 循环里调getBoundingClientRect()会强制同步布局——layout thrashing经典来源。

  • 即答侠把流水线配上具体"该这样/别那样"的代码片段——答得实际,不像照本宣科。

常见问题

Flexbox慢吗?

Flex和Grid确实比Block流贵,但几千项以下可忽略。布局成本取决于子树复杂度,不是布局模型。

GPU加速什么时候反而害人?

每个合成层都占显存。几百个元素都提升会在低端机OOM。只对要动的元素提升。

面试时担心忘词?即答侠实时助你

即答侠 AI 实时监听面试对话,自动识别问题并即时生成回答建议——无感辅助,让你从容应对每一道题。

免费试用即答侠