浏览器渲染流程

84 阅读3分钟

浏览器渲染原理

浏览器的主要功能是将用户输入的URL转换为可视化的图像。本文将详细介绍浏览器的渲染原理,包括从URL到DOM树的构建,以及从DOM树到可视化图像的转换过程。

前言

浏览器的渲染过程可以概括为两个主要步骤:

  1. 从URL到DOM树;
  2. 从DOM树到可视化图像。

这两个过程之间的关系并不是非常明确,我们可以统称这两个过程为页面的渲染。

网页的解析过程

思考问题

一个网页从URL输入到浏览器,经历了怎样的解析过程?

浏览器的功能与组成

浏览器内核

浏览器内核负责将代码转换成用户眼中的界面,以下是一些常见的浏览器内核:

  • Trident:IE、360安全浏览器、UC浏览器
  • Gecko:Mozilla Firefox
  • Presto -> Blink:Opera
  • Webkit:Safari、360极速浏览器、搜狗高速浏览器、移动端浏览器(Android、iOS)
  • Webkit -> Blink:Google Chrome,Edge

进程与线程

  • 进程:程序的一次执行,占有独有的内存空间,是操作系统执行的基本单元。
  • 线程:进程内的一个独立执行单元,是CPU调度的最小单元。

浏览器采用多进程、多线程模型,包括Browser进程、Renderer进程、GPU Process、Plugin Process等。

浏览器渲染流程

渲染引擎解析过程

渲染引擎在拿到一个页面后,如何解析整个页面并且最终呈现出我们的网页?

渲染引擎主要模块

一个渲染引擎主要包括:

  • HTML解析器:将HTML文本解释成DOM树。
  • CSS解析器:为DOM中的元素计算样式信息。
  • JavaScript引擎:解释JavaScript代码,通过DOM接口和CSSOM树接口修改网页内容和样式。
  • 布局(Layout)模块:计算元素的大小和位置。
  • 绘图模块(Paint):使用图形库将布局后的节点绘制成图像。

渲染页面的详细流程

HTML解析过程

浏览器遇到HTML标记时,调用HTML解析器解析为对应的token,并构建DOM树。

生成CSS规则

遇到style/link标记时,调用解析器处理CSS标记并构建CSS样式树。

构建Render Tree

当有了DOM Tree和CSSOM Tree后,就可以结合两者来构建Render Tree。

布局(Layout)和绘制(Paint)

  • 布局:在Render Tree上运行布局来计算每个节点的几何信息。
  • 绘制:将布局阶段计算的每个frame转换为屏幕上的实际像素点。

重绘和回流解析

重绘(Repaint)

  • 重绘(背景色)不会带来重新布局,但浏览器会根据元素的新属性重新绘制。

回流/重排(Reflow)

  • 回流必然导致重绘,因为元素大小位置布局改变了。

常见的触发"回流/重排"操作

  • 修改样式时尽量一次性修改。
  • 尽量避免频繁的操作DOM。
  • 对某些元素使用position的absolute或fixed。

合成和性能优化

  • 分层可以提高性能,但以内存管理为代价。

script元素和页面解析的关系

defer和async属性

  • defer:延迟脚本,告诉浏览器继续解析HTML,不要等待脚本下载。
  • async:异步脚本,让脚本完全独立,不保证顺序。

以上就是浏览器渲染原理的详细介绍,希望对你有所帮助。