当前位置: 首页 > news >正文

浏览器解析页面流程

从输入一个url到页面解析完成的流程

在这里插入图片描述

1. 网络进程

1. 获取url

  1. 浏览器首先判断输入的url是否有http缓存,如果有则直接从http缓存中读取数据并显示。如果没有,则进行下一步。
  2. 进行DNS解析,获取域名对应的IP地址。

2.下载html文件

  1. 浏览器根据IP地址和端口号与web服务器建立TCP连接,三次握手。
  2. 浏览器向web服务器发送HTTP请求,请求获取html文件。服务器返回html文件。

2. 渲染进程

1.解析html文件 生成dom树

  1. 解鞋html文件,并构造DOM树。边解析边构造。
  2. 在线解析开始时就会将link标签通过预解析线程来下载,dom解析到link标签时会将link标签的href属性值添加到预解析队列中。最终这些下载好的css会由主线程解析为cssom对象。
  3. dom树解析遇到script标签时,默认会暂停一下解析,先执行js脚本。等js脚本执行完成后再继续解析。如果script标签中设置了defer或者async属性,则不会暂停解析。

2.解析css文件生成cssom树

  1. 浏览器会先下载css文件,并构造cssom对象。
  2. cssom对象中包含选择器、属性、值等。
  3. 注意,cssom根节点下会挂载所有的 css样式表(比如内联样式表,默认样式鼠标,外部样式表)

3.生成渲染树

  1. 遍历dom树,将所有可见的节点添加到渲染树中。
  2. 遍历cssom树,找到与渲染树中的节点对应的样式规则。
  3. 生成渲染树中的每个节点的视觉信息。

4. 布局(Layout)

  1. 浏览器根据渲染树和cssom树,计算出每个节点的视觉信息。
  2. 根据视口的大小,计算出需要显示的节点。
  3. 布局树中每一个元素都是一个C++对象,布局树中每一个节点都包含一个位置信息。

5.分层(Layer)

  1. 将渲染树中的节点分成不同的层。
  2. 跟堆叠上下文有关的属性都会影响分层。比如z-index

6.绘制(Point)

  1. 遍历分层树,将每个节点绘制到屏幕上。
  2. canvas本质上就是在这个环节进行绘制的。
  3. 绘制的过程就是一条一条的绘制指令。
  4. 渲染主线程的工作完毕

7. 分块(Tiling) - 合成线程

  1. 浏览器会将绘每一层分为很多小区域,然后分块进行绘制。
  2. 启动多个线程同时完成工作

8. 光栅化(Raster) - GPU 进程运算

  1. 合成线程将分块后的图,进行光栅化操作生成位图
  2. 优先处理视口内的图块
  3. 生成的位图会交给合成线程

9. 合成显示

  1. 合成线程将多个位图合成为一张完整的图片信息,由合成线程交给GPU进程,再经GPU价交给显卡,最终显示在屏幕上。
  2. 由于合成线程与渲染主线程一样在浏览器的渲染进程中,并且渲染进程是一个独立的沙盒状态,所以合成线程无法直接将信息传递到显卡,因此合成线程需要将位图信息传递给GPU进程,由GPU进程传递。
  3. transform所有的效果均在这一步实现,由位图在GPU中进行计算变换。
http://www.lryc.cn/news/498587.html

相关文章:

  • 图的遍历之DFS邻接矩阵法
  • Java --- JVM编译运行过程
  • HTML5 拖拽 API 深度解析
  • GO--基于令牌桶和漏桶的限流策略
  • MongoDB性能监控工具
  • Axure设计之模拟地图人员移动轨迹
  • Android环境搭建
  • 前端工程化面试题(一)
  • 模型案例:| 手机识别模型!
  • 期权懂|个股期权交割操作流程是什么样的?
  • 【openGauss】openGauss execute执行update语句,获取更新的行数
  • P8780 [蓝桥杯 2022 省 B] 刷题统计
  • 切比雪夫不等式:方差约束下的概率估计
  • 使用CancellationTokenSource来控制长时间sql查询中断
  • 小红薯最新x-s 算法补环境教程12-06更新(下)
  • wazuh-modules-sca
  • Uniapp的App环境下使用Map获取缩放比例
  • 微信小程序配置less并使用
  • “全面支持公路数字化转型升级四大任务”视频孪生解决方案
  • 顶顶通电话机器人开发接口对接大语言模型之实时流TTS对接介绍
  • P3379 【模板】最近公共祖先(LCA)
  • 2030. gitLab A仓同步到B仓
  • 网易博客旧文-----如何在WINDOWS下载安卓(android)源代码并和eclipse做关联
  • MATLAB中axes函数用法
  • 构建 Java Web 应用程序:实现简单的增删查改(Mysql)
  • 3d行政区划-中国地图
  • 适合存储时序数据的数据库和存储系统
  • dolphinscheduler集群服务一键安装启动实现流程剖析
  • 深入了解Linux —— 学会使用vim编辑器
  • C05S01-Web基础和HTTP协议