以下是详解浏览器渲染页面过程的完整攻略:
一、浏览器页面渲染流程
从用户在浏览器地址栏输入URL开始到页面完全加载完成,浏览器渲染页面的主要过程包含以下几个步骤:
1. DNS 解析
当我们在浏览器地址栏输入网址时,首先会进行 DNS 解析,将域名解析为 IP 地址。如果浏览器没有缓存该域名对应的 IP 地址,就会向 DNS 服务器发送请求,获取域名对应的 IP 地址,完成地址解析。
2. 发起 HTTP 请求
得到了 IP 地址之后,浏览器会通过 HTTP 协议向服务器发起请求,请求对象包括 HTML、CSS、JavaScript 文件等。
3. 建立 TCP 连接
在浏览器发送请求时,需要向服务器建立 TCP 连接。TCP 的三次握手过程完成后,浏览器和服务器建立了可靠的通信渠道。
4. 接收服务器响应
服务器接到请求之后,会做出相应的回应,响应包括 HTTP 头和响应数据两部分,其中响应数据即为页面所需的 HTML、CSS、JavaScript 文件等。
5. 解析 HTML 构建 DOM 树
当浏览器收到响应后,会解析 HTML 文档,构建 DOM 树。DOM 树是一种树形结构,它将 HTML 文档中的所有元素按照其在文档中的嵌套关系组织起来,成为一棵树。
6. 解析 CSS 构建 CSSOM 树
在解析 HTML 的过程中,遇到 style 标签和 link 标签引用的外部 CSS 资源时,浏览器会同时构建 CSSOM 树,它也是一种树形结构,将 CSS 样式关联到 HTML 文档中的各个元素。
7. 将 DOM 树和 CSSOM 树合并生成渲染树
再将 DOM 树和 CSSOM 树进行合并,生成渲染树。渲染树只包含需要显示的节点和其样式信息。因为有些节点是不可见的,比如 head、script、display:none 等,这些节点不会出现在渲染树上。
8. 布局(Layout)渲染树
在布局阶段,确定每个节点在屏幕上的位置和大小,建立布局模型(Box Model)。
9. 绘制(Paint)渲染树
在绘制阶段,使用图像库将每个节点绘制出来,生成位图(Bitmap)。
10. 浏览器显示
最后,将位图显示在屏幕上,呈现出最终页面。
二、示例说明
示例一:重渲染
在 CSS 中使用了 display:none
属性时,不仅该元素不会出现在渲染树上,而且该节点的整个分支都不会在渲染树中。当更改 display:none
属性时,该节点会被重新添加到渲染树上,而整个分支都需要重建,导致重渲染。因此,需要尽量避免频繁使用该属性。
示例二:回流
当修改了某个元素的布局属性(如:width、height、padding、margin、display、position等)时,会触发回流(也叫重排)。回流的过程需要重新计算布局,重新生成渲染树和布局模型,并对需要渲染的元素进行重新绘制和重排列。当需要频繁对 DOM 进行操作时,可以优化代码,将元素批量插入或删除,以减少回流的影响。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解浏览器渲染页面过程 - Python技术站