首页 > 其他分享 >浏览器渲染原理

浏览器渲染原理

时间:2022-12-18 13:44:42浏览次数:61  
标签:CSSOM 浏览器 DOM 渲染 HTML 原理 节点

看渲染过程先了解几个概念

浏览器进程

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

Chrome浏览器的进程:主进程、渲染进程、GPU进程、网络进程、插件进程。

浏览器是一个多进程的软件

渲染引擎

之前讲过浏览器内核基本就是指的渲染引擎,而另一个引擎则是js引擎,也就是JavaScript解释器。其实下边跟我之前的认知里的分类有点冲突。

在linux系统编译的时候可发现都是一个一个模块构成的,同样一个渲染引擎(内核)主要包括几个模块:

  1. HTML解析器:解释 HTML 文档的解析器,主要作用是将 HTML 文本解释成 DOM 树;

  2. CSS解析器:为 DOM 中的各个元素对象计算出样式信息,为布局提供基础设施;

  3. JavaScript引擎:解释js代码

  4. 布局模块layout:在 DOM 创建之后,内核(即渲染引擎 如webkit)需要将其中的元素对象同样式信息结合起来,计算他们的大小位置等布局信息,形成一个能表达这所有信息的内部表示模型;

  5. 绘图模块paint:使用图形库将布局计算后的各个网页的节点绘制成图像结果;

 

DOM TREE

HTTP响应一个html文件给浏览器,html文件中的字符是怎样转变为一个可视的网页的?查看链接

核心:把结构化文档解析成一系列的节点,再由这些节点组成一个树状结构,这个树状结构就被称为DOM Tree

作用:所有的节点和最终的树状结构都有规范的对外接口,以达到使用编程语言操作文档的目的。(就是操作dom嘞)

当服务器把html网页发送给浏览器时,浏览器会解析html代码,生成dom树(dom tree),css则会生成css规则树(cssom tree)。有了这两个树再结合为一个渲染树(render tree),浏览器再斟酌一下就可以渲染(生成整个页面)了!

DOM Tree 包含了一个节点树和一些对应节点上的文本节点,但没有样式信息。

网页中的HTML代码和css代码是怎样被html解析器和css解析器读懂的,这就涉及到了编译原理词法分析那块了,在渲染引擎内部,HTML 解析器负责将 HTML 字符流转换为 DOM 结构,其转化过程如下:

  1. 首先将HTML文件字符流通过状态机读取分解为词(token);

  2. 再通过将词token转变为DOM;

那说到这,DOM树的构建过程是一个深度遍历的过程:当前节点的所有子节点都构建好后才会去构建当前节点的下一个兄弟节点。DOM树的根节点就是document对象。

CSSOM TREE

CSS Object Model 即CSS对象模型

浏览器在构建 DOM 树的同时,如果样式加载完成了,那么 CSSOM 树也会同步构建。CSSOM 树和 DOM 树类似,不过DOM 树描述的是 HTML 标签的层级关系,CSSOM 树描述的是选择器之间的层级关系

可以通过document.styleSheets来获取CSSOM Tree。

CSSOM Tree是依赖DOM Tree的哦,看下图可明白CSSOM Tree只包含了一个节点树和一些对应节点上的样式,但是没有文本节点。

 

浏览器渲染过程

首先总体的顺序肯定是从上往下依次读取HTML文件的代码,解析文档

  1. 遇到普通html标签:HTML解析器解析HTML,生成DOM树ing;遇到style/link标签:CSS解析器解析CSS,生成CSSOM树ing;遇见 script 标签:调用 javascript引擎来绑定事件修改 DOM 树/CSS样式树等

  2. 两棵树都构建完成再将DOM树和CSSOM树结合,生成渲染树(Render Tree); 这个时候渲染树生成了,注意只是生成了树,它还没有去布局和画图(回流和重绘)。

  3. 再通过布局模块Layout计算布局(回流): 根据生成的渲染树,进行回流(Layout),得到节点的几何信息(位置,大小)

  4. 通过绘图模块paint :根据渲染树以及回流得到的几何信息,得到节点的绝对像素

  5. Display: 将像素发送给GPU,展示在页面上;

参考:文章1文章2

相关文章

  • 超级好看的 Edge 浏览器新标签页插件:好用、好看、免费浏览器必备
    BdTab新标签页BdTab新标签页扩展是一款免费无广告、简单好用的的高颜值新标签页扩展。BdTab它颜值高、简单好用、支持高度自定义:在登录之后支持云备份,支持快速切换搜索引擎......
  • 超级好看的 Edge 浏览器新标签页插件:好用、好看、免费浏览器必备
    BdTab新标签页BdTab新标签页扩展是一款免费无广告、简单好用的的高颜值新标签页扩展。BdTab它颜值高、简单好用、支持高度自定义:在登录之后支持云备份,支持快速切换搜......
  • 字体渲染优化技术
    摘选自Linux字体美化实战(Fontconfig配置)[金步国](jinbuguo.com)渲染阶段的核心目标是:让字体中的每一个字符,都以其最佳效果在屏幕上显示出来。字体渲染三板斧改善矢......
  • B站网络安全之基础知识的学习(底层原理的剖析)
    HTTP协议刚了解完请求与响应的操作吧,接下来让我们看看HTTP的一些漏洞吧! 注意:不能实现啊(要不然完蛋) 1.逻辑漏洞  我们得看前面的地址有个CSDN对吧,但是要注意......
  • B站网络安全之基础知识的学习(底层原理的剖析)
    HTTP协议HTTP网络协议:用来数据传输的核心部分这里有两个概念:前端:可以肉眼看到的(基于HTML和Javascript)也叫客户端后端:提供数据和处理数据(你看不到!) 可能会有点形象:......
  • Flink的概念、特点及运行原理
    Flink是一个针对流数据和批数据的分布式处理引擎,主要用Java代码实现。目前,Flink主要还是依靠开源社区的贡献来发展的。对于Flink,其处理的数据主要是流数据,批数据只是流......
  • 1002.url路由及模板渲染方式
    一、url基本概念及格式URL概念:URL(UniformResoureLocator)统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简介的表示,是互联网上标准资源的地址。互......
  • Edge浏览器爱上WebVR
    微软此前表示,Edge浏览器将会取代InternetExplorer成为Windows10的默认网页浏览器。近日,微软宣布计划让Edge浏览器支持WebVR功能,允许用户直接在网页里观看VR内容。......
  • Vue的浏览器中的 webStorage
    Vue的浏览器中的 webStorage1:Api介绍/*webStorage存储内容大小一般支持5MB左右(不同浏览器可能还不一样)浏览器端通过Window.sessionStorage和Window.localStorage属性......
  • 精华推荐 | 【深入浅出RocketMQ原理及实战】「性能原理挖掘系列」透彻剖析贯穿RocketM
    什么是事务消息事务消息(TransactionalMessage)是指应用本地事务和发送消息操作可以被定义到全局事务中,要么同时成功,要么同时失败。RocketMQ的事务消息提供类似X/OpenXA......