浏览器渲染原理
浏览器的主要功能是将用户输入的URL转换为可视化的图像。本文将详细介绍浏览器的渲染原理,包括从URL到DOM树的构建,以及从DOM树到可视化图像的转换过程。
前言
浏览器的渲染过程可以概括为两个主要步骤:
- 从URL到DOM树;
- 从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:异步脚本,让脚本完全独立,不保证顺序。
以上就是浏览器渲染原理的详细介绍,希望对你有所帮助。