正文

Internet Explorer体系结构(11)

IE8 & 9开发实战:基于下一代IE的应用开发 作者:(美)克罗利


  

托管MSHTML的应用程序和对象并不仅限于IE框架和WebBrowser控件。由于所有功能都包装在活动文档对象中,所以任何有效的“文档宿主程序”都可以加载、显示和控制Trident。

Trident本身可以看作一个容器,其中容纳了紧密连接在一起的子系统,每个子系统都有自己的角色、功能,而且在大多数情况下,都有一组公开的公共界面(见图1-20)。

图1-20  Trident体系结构图

Trident使用标记和扩展,并在很多核心子系统中执行涉及这些标记与扩展的命令。尽管这个框图中标出了MSHTML的主要范围,但仍然有一些由IE及其设计所独有的私有组件未在这里给出。

1.5.1  分析器子系统

分析器负责读取、标记(tokenize)和分析供其他引擎组件使用的标记(markup)。分析器的第一级称为预分析器。在收到一个文档时,内部类对文本进行解码。然后使用内部标记器(tokenizer)将解码后的文本转换为标记流。

当预分析器在文本流中读取信息时,IE通过一个先行下载器传送该信息。这一功能扫描在后面分析过程中可能用到的资源URL(例如CSS和JavaScript脚本)。由于在等待下载相关文件时可能会明显降低渲染速度,所以尽快确认并请求这些资源是非常重要的。当找到候选URL时,将这个URL添加到网络请求队列中。这种预下载机制(有时也称为“推测下载”)有助于在最大限度上缩短Trident在等待下载相关项上花费的时间。

在进行解码和标记之后,主分析器从流中读取元素,并为整个HTML文档做准备。将会创建树节点和标记,标记流传送给核心文档子系统。

1.5.2  文档模式和兼容性视图

兼容性视图是IE布局引擎的一种模式,可以像在低版本IE中一样渲染和显示网页;这些版本称为“文档模式”。兼容性视图可以通过HTTP头、网页、用户界面或者兼容性列表来启动。

1.5.3  核心文档子系统

标记通过分析器之后,传送给“核心文档子系统”,也称为“标记服务”。这一部分Trident获取经过分析的标记后,构建标记流,并为使用和转换做一些准备工作,以将其转换为对象模型。通过标记服务API可以看到这一子系统的公共实现,这一实现通过IMarkupServices界面公开。在构造了标记流之后,就将其传送给其他Trident子系统。

注意:

尽管标记最终是由对象模型子系统放置在一个树状结构中,但存在一种很普遍的误解:是IE的分析器创建了一个文档“树”。标记服务创建了一种经过优化的专用文本流,以便于Trident的其余部分使用。如需更多信息,请查看MSDN中的IMarkupServices文档和文章。

1.5.4  文本、布局和渲染子系统

文本、布局和渲染子系统是一组内容非常广泛的内部界面,负责在屏幕和打印纸张上定位和显示内容。

文本引擎负责存储和显示信息,包括将文本块传送给相关子系统,例如编辑和布局。

布局引擎是一组算法,负责收集信息、构建数据结构和将大小和定位信息输出到呈现引擎。尽管没有与这个块相关联的公开界面,但在内部是知道它的,有时在一些博客中称为“页面、表格和线条服务”(PTLS)。

渲染引擎负责在屏幕上显示网页。它从布局引擎接收内容大小和定位信息,从脚本及二进制行为中接收自定义元素或元素效果定义,将这些内容的解释渲染在屏幕上。

1.5.5  对象模型子系统

这个对象模型在较高层次上,控制对文档元素进行分析之后与其进行的通信。它将分析器发现的文档元素绑定到脚本引擎,以支持动态HTML内容。


上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号