前端 浏览器渲染引擎

616 阅读3分钟

前端 浏览器渲染引擎

渲染引擎是浏览器最核心的组成部分,也就是我们常说的 浏览器内核,它负责显示页面内容

渲染流程

浏览器主要渲染过程包含3个主要步骤

  1. 构建DOM树
  • 浏览器在接受服务器端发来的Html文档之后,会根据标签之间的嵌套结构,通过词法、语法分析将其解析成一颗DOM树。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <p>Hello, world!</p>
  <ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
  </ul>
</body>
</html>

  • 浏览器在解析上述html代码,会生成下图所示的结构

  • 在这个过程中,有两个重要因素会影响解析生成DOM树的时间 ---> 标签数量和嵌套层级

  • 标签数量越多,解析时间越长
  • 标签嵌套层级越多,解析时间更长

小总结: 所以此处,应该在开发过程中就要考虑标签结构问题,从而保证性能的消耗

  1. 构建cssom树

css文件虽然本身并不像 HTML文件一样呈现出明显的层级结构,但也可以按照其样式规则中的选择器的嵌套关系来构造树形结构。 例如

body {font-size: 12px}
p {font-weight: light}
span {color: blue}
p span {color: red}

需要注意的是上图中显示的并非是真正的CSSOM树,实际在浏览器中还会包含浏览器的默认样式,而我们编写的样式只是对默认样式的替换。

  1. 构建渲染树

接下来浏览器会将两棵树进行合并,形成渲染树,渲染树只包含那些需要被显示的元素。然后浏览器会对渲染树进行布局,调整每个元素的大小和位置,最后对元素进行精确绘制,比如修改颜色和大小等。

在这一步中,有两个地方会影响到构建渲染树的性能: 3.1 样式匹配方式 3.2 布局与绘制 3.3 浏览器渲染引擎 对样式的匹配是从右向左。

因为从左往右的话,某个父元素会有多个子元素,会造成大量的回溯。但是从右向左的话,就会很快。并且,在最右侧的选择器尽可能选择唯一的明确的选择器。

  • 小栗子便于理解: 你要买nike的鞋子。你肯定先想到的是哪里有nike店,而不是哪里有商场。你找到店,在一步一步看他是属于那个商场的那一层。你品, 你细品

总结一下渲染页面的大致流程:

  1. 解析 HTML 标签并生成DOM树
  2. 解析 CSS 规则并生成CSSOM树
  3. 将DOM树和CSSOM树合并成一个渲染树
  4. 根据渲染树进行布局
  5. 对渲染树上的节点进行绘制

思考: 如何写出一个高性能的代码?(前端如何进行性能优化)

答: 前端性能优化不只涉及渲染引擎,但是就渲染引擎而言有一下几点:

  1. 避免写复杂的DOM结构,减少DOM层级,从而可以加快DOM树的构建。
  2. 避免编写复杂的css样式,从而可以加快CSSOM树的构建。
  3. 避免在选择器的右边使用通用的选择器,加快浏览器匹配样式规则的速度。
  4. 修改样式的时候,避免引起重新布局。
  • 以上内容,均出自通过学习 《了不起的JavaScript》一书中的,学习记录和总结。为了加深自身学习印象。如有不足,欢迎各路大神抡锤。