美文网首页
浏览器渲染深入理解一:解析器与DTD

浏览器渲染深入理解一:解析器与DTD

作者: 卡布奇诺的秘密_Me | 来源:发表于2019-01-15 17:07 被阅读0次

都是本人理解,笔记大致概念,不详细也并非完全正确,所以仅供参考。

参考文档:浏览器的工作原理:现代网络浏览器幕后揭秘 - HTML5 Rocks


解析器

众所周知,浏览器渲染页面的过程是以下步骤:

  • 处理 html 并构建 dom 树。
  • 处理 css 并构建 cssom 树。
  • 将 dom 与 cssom 合并成一个 render 树。
  • 根据 render 树来进行布局,计算每个节点的坐标信息。
  • 将各个节点的信息发送给 GPU,由 GPU 绘制到屏幕上。

其中,因为 js 会修改 dom 和 style ,所以以上过程会被重复执行。

所以这篇文章简单说一下解析器是如何将 html/css 构建成 dom/cssom 的。

常规解析器

还记得在《JavaScript 笔记七:DOM、BOM、AST抽象语法树》这一章简单说过AST抽象语法树,可以理解符合规则的内容都可以被解析成对象的形式进行具体操作,而常规解析器也是类似,它的工作有以下两个过程:

  • 词法分析
  • 语法分析

词法分析是将输入内容分割成大量标记的过程,而标记则是语言中的词汇,即构成内容的单位。在人类语言中可以理解为单词。

而解析是以文档所遵循的语法规则为基础,所有可以解析的格式都必须对应确定的词汇和语法,这称为与上下文无关的语法。人类语言并不属于这样的语言,因此无法用常规解析器进行解析。

举一下例子:2 + 3 - 1

其中,1、2、3 属于整数,+、- 属于运算符,2+3 属于表达式,他们都是属于词法中的某一个项。

表达式则需要满足语法:一个项连接运算符,再连接一个项

所以解析之后,结构如下:

解析关系

所以基本解析器,就是根据语法去匹配词法,进行相应解析。

HTML解析器

而 HTML 的语法是非与上下文无关的语法,因为 HTML 的处理太过宽容,它允许省略某些隐式添加的标记,有时还能省略一些起始或者结束标记等等,所以 HTML 整体来看是一种“软性”的语法。

所以定义 HTML 的正规格式为:DTD,也就是下面要讲的。


DTD

在以前 html4的时代,可以在文档头部看到诸如此类的定义:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd">

实际上,DTD 并非 HTML的专属,实际上,DTD 是 SGML(标准通用标记语言)的解析器,所以 DTD 格式可用于定义 SGML 族的语言。

而 HTML 和 XML 派生于SGML:

  • XML是它的一个子集
  • HTML是它的一个应用

另外还有XHTML,都是派生于 SGML。

所以以前在文档头加一行这个代码,是为了告诉浏览器以 DTD 的格式进行解析文档,而在 HTML5 不基于 SGML ,所以它没有 DTD,但是为了向后兼容,所以 HTML5 需要添加 <!doctype html>

那么 HTML5 基于什么,又用什么格式进行解析?

实际上,没有更合适的答案来告诉你 HTML5 基于什么格式,用维基百科的话来说:

虽然它的灵感来自于 SGML,但在实践中,它实际上只与 SGML 在语法上有少许相似之处。由于 HTML5 不再正式基于SGML,DOCTYPE 不再服务于此目的,因此不再需要引用 DTD 。

可以理解为 HTML5 是模仿 SGML 的一个新的格式,它更完善、优美和强大。

而 HTML5 由于模仿 SGML 所以亦不能使用常规解析器,不基于 SGML 也不再引用 DTD,所以就创建了自定义的解析器来解析 HTML5,HTML5 解析算法参考

相关文章

  • 浏览器渲染深入理解一:解析器与DTD

    都是本人理解,笔记大致概念,不详细也并非完全正确,所以仅供参考。 参考文档:浏览器的工作原理:现代网络浏览器幕后揭...

  • 2019-01-27

    1.渲染机制。 什么doctype及作用 dtd: 告诉浏览器我是什么样的文档类型,浏览器会根据dtd去判断我用什...

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

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

  • 前端基础重点回顾6:渲染机制、页面性能优化、错误监控

    渲染机制 DOCTYPE DOCTYPE是用来声明文档类型的,告诉浏览器使用哪一种DTD规范的文档类型。 DTD(...

  • 前端面试准备--10.渲染机制

    浏览器怎么渲染页面的? 1.什么是DOCTYPE及作用 DTD(document type definition,...

  • 重绘和重排(回流)

    一、浏览器渲染HTML的步骤 HTML被HTML解析器解析成DOM Tree, CSS则被CSS解析器解析成CSS...

  • 虚拟DOM是啥?

    一、浏览器渲染HTML的步骤 HTML被HTML解析器解析成DOM Tree, CSS则被CSS解析器解析成CSS...

  • 浏览器渲染

    DOCUTYPE DTD:文档类型定义,告诉浏览器文档类型,浏览器根据文档类型来判断使用什么引擎来解析渲染 DOC...

  • 浏览器的渲染机制

    渲染机制:描述浏览器如何渲染页面 DTD 文档类型定义,是一系列语法规则,用来定义XML或者HTML的文件类型。浏...

  • 面试基础

    什么是DOCTYPE以及作用DTD告诉浏览器我是什么文档类型 浏览器根据这个用哪个引擎来渲染DOCTYPE声明文档...

网友评论

      本文标题:浏览器渲染深入理解一:解析器与DTD

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