美文网首页
略知一二之浏览器渲染原理

略知一二之浏览器渲染原理

作者: 太上云初 | 来源:发表于2019-04-26 15:09 被阅读0次

浏览器渲染原理


推荐相关阅读文章


前言

本文主要阐释浏览器是如何使用html、css、javascript渲染页面。浏览器中页面的渲染是由渲染引擎负责的,目前渲染引擎主要分为两种:Firefox 中的 Gecko、Chrome 和 Safari 中的 WebKit 。


浏览器大致的工作流程

  • 浏览器首先解析 html ,构建 DOM Tree ,在这一过程中如果遇到 CSS 内容,浏览器会去构建 CSSOM,两者互不干扰 (但是有特殊情况,后面会解释)。等 DOM Tree 和 CSSOM 构建完毕后,浏览器会通过二者构建 Render Tree,最后调用 GUI 将 Render Tree。 上相关内容绘制到屏幕上。
  • 流程图如下
  1. Gecko主要流程:

    Gecko主要流程
  2. WebKit主要流程:

    WebKit主要流程

DOM Tree 的建立

  • 浏览器会根据一系列的步骤处理 HTML ,将 HTML 构建成 DOM Tree 。大致上会经历以下步骤:

    Bytes => Characters => Tokens => Node => DOM

  • 第一步(转换):浏览器从硬盘或者网络服务获取到 HTML 的原始字节,并且根据文件指定的编码格式将字节转换成字符。

  • 第二步(Token):又称令牌化,浏览器会将字符串转换成符合 W3C HTML5 的标准各种 Token,如 "<html>"、"<body>"等等令牌,每个令牌都具有特殊的含义和一组规则。每个 Token 都会标识当前 Token 是“开始标签”还是“结束标签”又或者是“文本内容”等信息。 通过这些标识,Token就可以维护节点与节点之间的关系。此时的生成的 Token 形式如下:

    Token
  • 第三步 (生成Node并构建DOM):根据生成的 Token 开始生成节点并构建 DOM,消耗 Token 生成 Node 时并不是等将整个 HTML 转换成 Token 再生成 Node,而是一边生成 Token ,一边消耗 Token 生成Node。直白点就是一个 Token 生成就会被消耗生成 Node。 根据 Token 的“开始标签”和“结束标签”来识别和关联节点,将节点对象链接到一个树状的数据结构内。 当所有的 Token 生成并消耗完毕时,将得到一个完整的 DOM Tree

    带有结束标签标识 的 Token 不会生成Node

    从 Token 生成 DOM Tree 的过程如下:

Token生成DOM Tree

CSSOM(CSS Object Mode) 的建立

  • CSSOM 是 CSS Object Mode 的简称,是一组允许 Javascript 操纵 CSS 的 API。

  • 相关术语介绍: Gecko把格式化好的可视元素成为“帧树”(Frame Tree),每个元素都是一帧(Frame)。而在 Webkit 中则使用“渲染树”(Render Tree),"渲染树"由渲染对象组成。

  • 正题:CSSOM 的构建与 DOM 的构建是十分相似的,如下:

    Bytes => Characters => Tokens => Node => CSSOM
    (查阅了很多资料,这一过程的详细情况并不是很清楚)

    • 在 Webkit 和 Gecko 中, CSSOM 的构建过程是不一样的。
    • 在 Gecko 中在解析 CSS 的时候先生成 CSS Rule Tree , 然后对照着 DOM 树生成 Style Context Tree。这个 Style Context Tree 就是我们要的 CSSOM。
    • 在 Webkit 中并不需要 CSS Rule Tree 和 DOM Tree 两个树来配合,Webkit 有Style对象,它直接把这个Style对象存在了相应的DOM结点上生成 CSSOM。
  • CSSOM 的格式如图:


    CSSOM

注:

1. CSS 匹配 DOM Tree 主要是从右到左解析选择符,这是一个相当复杂和有性能问题的事情。


2. CSSOM 和 DOM Tree 的构建可以同步进行。DOM 的解析是可以逐步完成的,不需要等待所有的 DOM 都构建完,但是要进入下一个阶段必须要等 CSSOM 构建完成。因为每一个 css 属性都可以影响CSSOM,如果不等 CSSOM 构建完毕,那么得到的 CSSOM 是不准确的。


Render Tree 渲染树

  • 当我们的 DOM Tree 和 CSSOM 都构建完毕后,此时的 DOM Tree 和 CSSOM 是两棵完全独立的树结构, 开始将两棵树合成 Rnder Tree。

  • Render Tree 和 DOM Tree 还是有些不同的,渲染树上不会出现 “display: none”的元素,渲染树上只会出现需要显示节点和这些节点的样式信息。

  • 主要工作

    • 从 DOM Tree 根节点开始遍历可见节点
    • 对于每个可见节点,为其找到适配的 CSSOM 规则并应用。

布局

渲染树构建完毕后,开始进行布局。在绘制之前浏览器需要计算出每个元素节点的大小和在页面的位置,这一过程也称为重排。

绘制

布局完成后,每个元素节点都有了自己的大小、位置信息,浏览器开始按照这些信息将元素节点绘制到屏幕上。

相关文章

  • 略知一二之浏览器渲染原理

    浏览器渲染原理 推荐相关阅读文章 浏览器页面渲染机制,你真的弄懂了吗? 关键渲染路径 深入浅出浏览器渲染原理 [译...

  • 浏览器原理相关视频课程

    大话浏览器渲染原理浏览器渲染原理和打开网页机制HTTPS 网络协议原理解析从零开始,彻底掌握浏览器渲染原理深入V8...

  • 前端性能优化-渲染优化

    一、浏览器渲染原理和关键渲染路径 浏览器渲染原理:读取html,css文本,构建DOM树。(DOM ,CSSOM)...

  • 浏览器渲染机制

    参考链接:浏览器渲染的那些事(一)浏览器内部工作原理浏览器的渲染原理简介有关网页渲染,每个前端开发者都该知道的那点...

  • css渲染原理

    css渲染原理 浏览器渲染原理浏览器接收到服务器返回的html页面。浏览器开始构建DOM树(DOM TREE),遇...

  • 2017前端面试题之综合篇(1)

    1 . 浏览器如何渲染? 浏览器的渲染原理简介 专题:浏览器:渲染重绘、重排两三事 浏览器加载和渲染HTML的顺序...

  • 公开课一、浏览器渲染原理 ------ 2020-03-07

    1、知识铺垫: 2、框架性叙述浏览器渲染原理: 3、根据浏览器的渲染原理我们能做的性能优化:

  • css知识总结

    一、浏览器渲染原理 要了解浏览器渲染页面的过程,首先得知道一个名词——关键渲染路径。关键渲染路径是指浏览器从最初接...

  • 小皆学前端—主流浏览器的内核浅析

    浏览器内核,包括浏览器渲染引擎和JS解析引擎。负责对网页的语法进行解释并渲染(渲染再我另外一篇文章浏览器的渲染原理...

  • 前端面试题目

    bat大厂面试题目 浏览器工作原理 浏览器引擎- 用来查询及操作渲染引擎的接口渲染引擎- 渲染界面:Firefox...

网友评论

      本文标题:略知一二之浏览器渲染原理

      本文链接:https://www.haomeiwen.com/subject/ljtqnqtx.html