| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 系统运维 -> 浏览器的工作原理 -> 正文阅读 |
|
|
[系统运维]浏览器的工作原理 |
|
内容来自浏览器的工作原理 简化的浏览器结构图
渲染器下面还有很多小功能模块 浏览器的多进程结构
请求数据并且渲染数据到页面
当我们在地址栏输入内容时,浏览器进程的UI线程会捕捉该内容,如果输入的是网址,则UI线程会启动一个网络线程来请求DNS进行域名解析,接着开始连接服务器开始获取数据,如果你的输入不是网址,而是一串关键字,浏览器就会使用默认配置的搜索引擎来查询。 渲染流程1.构造DOM Tree 渲染器进程的主线程将HTML解析,构造DOM Tree数据结构(DOM文档对象模型,由多层节点构成的文档,用户可以通过他用户可以修改,删除,增加页面的内容) 获得了DOM Tree之后,但我们还不知道每个节点长什么样子,主线程会解析css,来确定每个DOM节点的样式,浏览器中会有默认的样式,比如H2的字体要比H3的字体大,在知道了每个节点以及对应的样式,接下来计算节点的位置,也就是节电的坐标以及该节点需要占用多大的区域,这个阶段被称为Layout布局,主线程通过遍历DOM tree和计算的样式来生成Layout Tree,Layout Tree上的每个节点都计算好了x,y坐标和边框尺寸,这里需要注意的是DOM Tree和Layout Tree上的节点不是一一对应的,设置了display:none的节点不会出现在Layout Tree上,而在before伪类中添加了content值的元素,content里的内容会出现在Layout Tree上,不会出现在DOM Tree中,这是因为DOM Tree是解析HTML生成的,和样式没有关系,而Layout Tree是遍历DOM Tree和计算好的样式来生成的,Layout Tree和最终显示在屏幕上的节点相对应的,现在我们已经知道了DOM 节点的大小形状和位置
知道了DOM 节点的大小形状和位置,我们还需要知道以什么样的顺序来绘制这样的节点,举例来说,z-index属性会影响节点绘制的层级关系,如果我们按照DOM Tree的顺序来绘制节点,则会导致错误的渲染,所以为了保证能够在屏幕上展示正确的层级,主线程会遍历Layout Tree,通过遍历Layout Tree,生成Layer Tree,同时生成一个绘制记录表(Paint Record)该表记录了绘制的顺序,这个阶段被称为绘制 现在Chrome采用的栅格化技术,叫做合成(Composting) 将页面的多个部分分成多个图层 ,分别对齐进行栅格化,并在合成器线程中(Compositer Thread)单独 进行合成页面的技术,简单来说,就是页面所有的元素按照某种规则进行分图层, 并把图层都栅格化好了, 然后把可视区域中的内容展示成一帧展示给用户即可, 大致流程 浏览器进程中的网络线程获取到HTML数据之后,交给渲染器主线程进行解析,生成DOM Tree,接着,进行样式计算,主线程通过遍历DOM Tree和计算好的样式生成Layout Tree, 通过遍历Layout Tree生成Layer Tree和绘制信息表, 然后渲染器主线程将Layer Tree和Paint一起传送给合成器线程, 合成器线程按照规则将Layer Tree分层,并没每一层进行分块,将分好的块传送给栅格化线程进行栅格化,栅格化线程将栅格完成之后的draw quads图块信息发送给合成器线程,合成器线程将其合成一帧,然后将合成器帧通过IPC传回给浏览器进程,浏览器进程在传送给GPU进行渲染,之后就展示到屏幕上了 |
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/30 8:18:32- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |