`

浏览器内核引擎——渲染引擎续(HTML解析)

 
阅读更多
html语法分析:

html解析器的工作是解析html到解析树。html的词汇与语法定义在W3C创建的规范中,语法可以用类似的BNF(巴克斯
范式)来定义,下面来看一个概念:
上下文无关文法:

在计算机科学中,若一个形式文法 G = (N, Σ, P, S) 的产生式规则
都取如下的形式:V ->

 w

,則称之为上下文无关的

,其中 V∈N ,w

∈(N∪Σ)* 。上下文无关文法取名为“上下文无关”
的原因就是因为字符 V 总可以被字串 w 自由替换,而无需考虑字符 V 出现的上下文。一个形式语言是上下文无关的,
html无法用解析器所需的上下文无关文法语法来定义,过去的html有格式规范的DTD(dcoument)来定义,但是他
不是一个上下文无关文法。
html DTD


html的定义使用DTD文件,这种格式用来定义SGML族语言,它包含了对所有元素的定义,包括他们的属性和层次关系
DOM


语法分析输出的树是由DOM元素和属性节点组成的,DOM全称是Document Object Model,他是HTML文档对象
对象化表述,也是html元素与外界(javascript)的接口
DOM与标签一一对应,如下面的标签
<html>
	<body>
		<p>
			Hello World
		</p>
		<div> <img src="example.png"/></div>
	</body>
</html>
转换成DOM




 解析算法:
htm无法l使用自上而下或者自下而上语法分析
理由如下:
1.语言的宽容特点
2.浏览器需要对无效的html提供容错的事实
3.解析过程反复,通常解析过程中源码不会变化,但在html中由于脚本的原因,解析过程会改变源码
浏览器创建了自己的解析器来解析html文档,解析器分为两部分:粉刺和构建树,分析属于词法分析,它把输入解析成
符号序列,在html中符号就是开始标签,结束标签,属性标签和属性值
分词识别这些符号并送入熟的构架者,然后继续分析下一个符号,直到输入结束




 分词算法:
算法的输出是HTML符号。算法可以用状态机来描述。 每一个状态从输入流中消费一个或多个字符,并根据它们更新
下一状态。决策受当前符号状态和树的构建状态影响。这意味着同样的字符可能会产生不同的结果,取决于当前的状
态。算法太复杂,我们用一个例子来看看它的原理。

分析下面的标签
<html>
	<body>
		Hello world
	</body>
</html>
     初始状态是“Data state”当遇到“<“时状态改为”Tag open state“吃掉”a-z”字符组成的符号后产生了
”Start tag token”,状态变更为“Tag name state”

。我们一直保持此状态,直到遇到”>”。每个字符都被追加到
新的符号名上。在我们的例子中,解出的符号就是”html”。
     当碰到”>”时,当前符号完成,状态改回“Data state”

。”<body>”标签将会以同样的方式处理。现在”html”
与”body”标签都完成了,我们回到“Data state”

状态。吃掉”H”(”Hello world”第一个字母)时会产生一个字符
符号,直到碰到”</body>”的”<”符号,我们就完成了一个字符符号”Hello world”
      现在我们回到“Tag open state”

状态。吃掉下一个输入”/”时会产生一个”end tag token”并变更为
“Tag name state”

状态。同样,此状态保持到我们碰到”>”时。这时新标签符号完成,我们又回到“Data state”

。
同样”</html>”也会被这样处理。

如下图所示:




 树的构建算法:
构建书这一阶段的输入是符号识别阶段生成的符号序列
构建时“initial mode”,接受到html符号后转换为”before html“ 模式,但是这个模式对这个符号进行再处理,此时,
创建了一个HTMLHtmlElement元素,并将其附加到跟Document对象上
状态变为”before head “,接收到body符号时,这里即使没有head符号,也将自动创建一个HTMLBodyElement
元素,并附加到树上
现在,转到”in head“模式,然后是”after head“,到这里,body会再次处理,将创建一个htmlBodyElement
元素附加到树上,同时转移到”in body“模式
然后,接收到字符串”hello world“第一个字符将导致创建并插入一个text节点,其他字符将附加到该节点
接收到body的结束符时,
接收到body结束符时,转移到”after body“模式,接着接收到html结束符符号,这个节点意味着转移到了”after after
body“模式,当接收到文件结束符时,整个解析过程结束



 解析结束后的动作
这一阶段浏览器会把文档标记为交互模式,并开始解析deferred模式中的script。“deferred”意味着脚本应该在文档
解析完成后执行,脚本处理完成进入“complete“状态,load事件发生
  • 大小: 33 KB
  • 大小: 27.2 KB
  • 大小: 21.6 KB
  • 大小: 13.9 KB
分享到:
评论

相关推荐

    浏览器内核详解

    浏览器内核是浏览器的核心组成部分,主要负责解析网页的HTML、CSS和JavaScript,将这些内容转换成用户可以交互的可视界面,也就是我们常说的渲染引擎。它处理从网络接收的数据,执行脚本,与操作系统交互,确保...

    浏览器内核知识你知多少.docx

    尽管所有浏览器内核的基本目标都是相同的——解析网页代码并呈现网页内容,但在实际操作过程中它们之间存在明显差异: - **兼容性**:不同的内核对Web标准的支持程度不同,这可能导致同一网页在不同浏览器中的呈现...

    Web前端学习笔记——HTML基础.docx

    浏览器内核是指浏览器核心引擎,负责解析和渲染网页。常见的浏览器内核有 Trident(IE 内核)、Gecko(Firefox 内核)、WebKit(Safari 内核)、Blink(Chrome 内核)和 Presto(Opera 内核)等。每种内核都有其特点...

    语言内核浏览器,支持最新HTML5

    WebKit是一种开源的网页渲染引擎,广泛用于各种浏览器,如Apple的Safari和Google的Chrome,它能够快速且准确地解析和展示网页内容。 描述中的“把编译后的文件放在接口库目录下即可运行”,揭示了软件的部署流程。...

    自制网盘搜索器(使用WebKit .NET内嵌Webkit浏览器内核)

    本项目“自制网盘搜索器”就是这样一个解决方案,它利用WebKit .NET库,内嵌Webkit浏览器内核,实现了对多个网盘平台的搜索功能。 WebKit .NET是一个开源项目,它提供了.NET Framework与WebKit渲染引擎的接口。...

    搜狗浏览器2.0,据说速度最快的浏览器

    1. **浏览器内核**:浏览器内核决定了浏览器如何解析HTML、CSS和JavaScript等网页标准,以及如何渲染网页。常见的内核有Trident(IE)、Gecko(Firefox)、WebKit(Safari)和Blink(Chrome、搜狗等)。搜狗浏览器...

    手机浏览器源代码(全部c语言)

    3. 渲染引擎:负责解析HTML、CSS,并构建DOM树,再通过布局计算生成屏幕上的像素。C语言实现的渲染引擎可能包含如Webkit或Blink这样的开源项目,它们能高效地处理复杂的网页布局和渲染任务。 4. 网络模块:负责处理...

    自制网盘搜索工具(使用CefSharp内嵌Chrome浏览器内核)

    CEF是Google Chrome浏览器的核心部分,提供了强大的渲染引擎和JavaScript执行环境。通过CefSharp,我们可以将Chrome的功能直接集成到我们的应用中,使得应用能够呈现复杂的网页内容,执行JavaScript代码,并与网页...

    C# winfrom webbrowser控件 内嵌火狐内核内核

    通常,`WebBrowser`控件默认使用的是Internet Explorer的Web渲染引擎,但在某些情况下,开发者可能希望使用更现代或者更定制化的浏览器内核,比如火狐的Gecko内核。 标题中的"C# WinFrom WebBrowser控件内嵌火狐...

    基于IE内核的多进程浏览器源码

    IE内核,也称为Trident渲染引擎,是微软在1990年代末期开发的,用于解析HTML、CSS、JavaScript等网页内容的技术。多进程架构则是现代浏览器普遍采用的一种设计,它将每个打开的标签页或插件置于独立的进程中,以防止...

    多浏览器兼容分析

    浏览器内核主要分为两大部分:渲染引擎和JS引擎。 - **渲染引擎**:负责解析和渲染HTML、CSS等网页元素,输出可视化的网页内容。 - **JS引擎**:解析并执行JavaScript代码,实现网页的动态交互。 常见的浏览器内核...

    IE内核插件,支持浏览器播放FLASH动画的插件

    标题中的“IE内核插件,支持浏览器播放FLASH动画的插件”指的是在基于Internet Explorer(简称IE)浏览器内核的浏览器中,用于播放Adobe Flash内容的特定插件。Flash是一种广泛使用的多媒体平台,用于创建动画、交互...

    Chromium内核多标签浏览器(dcef3-3.1650)

    1. **网页渲染**:Chromium内核采用了Blink渲染引擎,能够高效地解析和展示HTML、CSS和JavaScript代码,提供快速的页面加载和流畅的用户体验。 2. **多进程架构**:Chromium采用多进程架构,每个标签页运行在独立的...

    各主流浏览器及其内核介绍

    不同的浏览器使用不同的技术内核来渲染网页,这些内核被统称为渲染引擎(Rendering Engine),它们负责网页的解析和展示。了解不同浏览器及其内核,对于网页设计师和前端开发人员来说至关重要,因为这关系到网页兼容...

    易语言-谷歌内核EasyCKL多标签浏览器 - 简易浏览器

    - Blink渲染引擎:Chromium内核采用Blink渲染引擎,负责解析HTML、CSS和JavaScript,展示网页内容。 - V8 JavaScript引擎:用于执行JavaScript代码,具有高性能和内存效率。 - 浏览器API:Chromium提供了丰富的...

    浏览器Apple Safari和Google Chrome内核webkit

    与此同时,不同的浏览器内核——WebKit、Gecko和Trident——各自有其优势和挑战,影响着开发者的决策和用户的浏览体验。随着技术的发展,浏览器市场竞争愈发激烈,内核的技术进步将继续推动Web技术向前发展。

    浏览器原理和XSS蠕虫攻击

    浏览器内核是浏览器的核心组成部分,负责解析网页内容并将其呈现给用户。典型的浏览器内核结构包括以下几个关键组件: 1. **渲染引擎(Rendering Engine)**:负责将HTML、CSS和JavaScript转换成可视化的页面。 2. ...

    vc浏览器源码

    接下来,浏览器的核心部分是渲染引擎,负责解析HTML、CSS、JavaScript等Web内容,并将其转化为可视化的页面。在"vc浏览器源码"中,开发者可能采用了IE的Trident渲染引擎,这是IE系列浏览器所使用的排版引擎。通过...

    基于firefox(火狐)浏览器引擎gecko,基于xulrunner框架基础之上实现基于web技术的跨平台开始框架

    Gecko是Mozilla基金会开发的一款开源渲染引擎,用于解析和显示Web内容。它支持多种Web标准,包括HTML、CSS、JavaScript、SVG以及我们的重点——HTML5。Gecko通过快速、稳定地执行这些标准,为Firefox浏览器提供了...

Global site tag (gtag.js) - Google Analytics