《顺序布局构建器.pdf》由会员分享,可在线阅读,更多相关《顺序布局构建器.pdf(19页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 102804175 A (43)申请公布日 2012.11.28 C N 1 0 2 8 0 4 1 7 5 A *CN102804175A* (21)申请号 201180015863.0 (22)申请日 2011.03.24 12/732,088 2010.03.25 US G06F 17/21(2006.01) (71)申请人微软公司 地址美国华盛顿州 (72)发明人 E.N.韦塞罗夫 R.P.阿塔纳索夫 M.J.乔尔森 (74)专利代理机构中国专利代理(香港)有限公 司 72001 代理人李舒 汪扬 (54) 发明名称 顺序布局构建器 (57) 摘要 描述了布局。
2、处理技术,所述布局处理技术允 许实施结构化文档的处理,以及允许以顺序的方 式完成相关联的布局。布局过程被分成可以顺序 地执行的多个更小的步骤。在至少一些实施例中, 布局构建器被结合栈使用以控制在结构化文档的 结构层次的各层次上的布局执行。不可变的数据 结构被使用,并且其允许顺序布局操作的并行执 行。在至少一些实施例中,可以完成所述布局序列 的部分执行来产生可用的数据。 (30)优先权数据 (85)PCT申请进入国家阶段日 2012.09.25 (86)PCT申请的申请数据 PCT/US2011/029722 2011.03.24 (87)PCT申请的公布数据 WO2011/119792 EN 。
3、2011.09.29 (51)Int.Cl. 权利要求书2页 说明书9页 附图7页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书 2 页 说明书 9 页 附图 7 页 1/2页 2 1.一种计算机实施的方法,包括: 接收结构化文档; 在结构化文档内遇到打开标签; 创建与所述打开标签相关联的框构建器; 创建相关联的布局框;以及 使用所述框构建器来顺序地处理所述结构化文档,以及用可再现的内容填充所述布局 框。 2.权利要求1的方法,还包括确定所述结构化文档中的随后的标签是否是与所述打开 标签相关联的关闭标签,并且如果是的话,使得所述布局框插入到显示树中。 3.权利要求1的。
4、方法,还包括: 确定所述结构化文档中的随后的标签是否是与所述打开标签相关联的关闭标签,并且 如果是的话,使得所述布局框插入到显示树中;和 再现所述显示树中的内容。 4.权利要求1的方法,还包括: 确定所述结构化文档中的随后的标签是否是与所述打开标签相关联的关闭标签,并且 如果是的话,使得所述布局框插入到显示树中;和 再现所述显示树中的内容,其中所述再现是在所述结构化文档被完全地顺序处理之前 执行的。 5.权利要求1的方法,还包括确定所述结构化文档中的随后的标签是否是与所述打开 标签相关联的关闭标签,并且如果不是的话,继续顺序地处理所述结构化文档,以有效于用 可再现的内容填充所述布局框。 6.权。
5、利要求1的方法,其中所述使用包括使用被组织为分层地嵌套的框构建器的数据 栈来存储临时数据。 7.权利要求1的方法,其中所述框构建器包括特定于所述打开标签的布局构建逻辑。 8.权利要求1的方法,其中所述框构建器被组织为有限状态机。 9.权利要求1的方法,其中所述布局框是可再次使用的。 10.权利要求1的方法,其中所述创建是由布局构建器执行的,以及其中所述结构化文 档的顺序处理利用并发的布局构建器而并行地发生。 11.一种或多种计算机可读存储媒体,其包含计算机可执行指令,当这些指令被执行时 实施一种方法,所述方法包括: 接收HTML文档; 在HTML文档内遇到打开标签; 创建与所述打开标签相关联的。
6、框构建器; 创建相关联的布局框; 使用所述框构建器来顺序地处理所述HTML文档,以及用可再现的内容填充所述布局 框; 确定所述HTML文档中的随后的标签是否是与所述打开标签相关联的关闭标签,并且 如果不是的话,继续顺序地处理所述HTML文档,以有效于用可再现的内容填充所述布局 框;和 权 利 要 求 书CN 102804175 A 2/2页 3 如果所述随后的标签是与所述打开标签相关联的关闭标签,则使得所述布局框插入到 显示树中。 12.权利要求11的一种或多种计算机可读存储媒体,还包括再现所述显示树中的内 容。 13.权利要求11的一种或多种计算机可读存储媒体,还包括在所述HTML文档被完全。
7、地 顺序处理之前再现所述显示树中的内容。 14.权利要求11的一种或多种计算机可读存储媒体,其中所述使用包括使用被组织为 分层地嵌套的框构建器的数据栈来存储临时数据。 15.权利要求11的一种或多种计算机可读存储媒体,其中所述框构建器包括特定于所 述打开标签的布局构建逻辑。 权 利 要 求 书CN 102804175 A 1/9页 4 顺序布局构建器 背景技术 0001 使用Web浏览器再现结构化的Web内容,诸如HTML和CSS内容,典型地牵涉到处 理包括标记的结构化文档以确定内容的布局(layout),使得其可以由Web浏览器呈现。这 样的处理可以包括内容位置、大小和形状计算,以便从所述标。
8、记确定相关联的内容将如何 被呈现在屏幕或显示器上。对于可用性和用户感知而言,期望的是布局和呈现算法按照可 适用的标准快速并正确地工作。 0002 在整个业界,布局处理普遍以递归方式执行。例如,这样的处理可以包括在HTML 标记的根节点上发起处理操作,并以递归的方式贯穿该标记向下处理到叶节点。该处理典 型地在HTML文档被呈现之前在整个HTML文档上进行。此外,现代的多核体系结构可以准 许处理被并行地执行。然而,因为布局处理的递归性质,从并行处理所得到的优势不能被充 分利用。 0003 布局处理的递归性质也可能导致处理中的重复,这进而又可能使性能和用户体验 降级。 发明内容 0004 本概要被提。
9、供来以简化的形式介绍概念的选择,这些概念还将在下面的详细说明 中进行描述。本概要既不打算确认所要求保护的主题的关键特征或必要特征,也不打算被 使用来限制所要求保护的主题的范围。 0005 按照一个或多个实施例,对结构化文档的布局处理以顺序的方式实施(conduct)。 布局过程被分成可以顺序地执行的多个更小的步骤。在至少一些实施例中,布局构建器被 结合栈使用以控制在文档的结构层次的各层次上的布局执行。不可变的数据结构被使用, 并且其允许顺序布局操作的并行执行。在至少一些实施例中,可以完成布局序列的部分执 行来产生可用的数据。 附图说明 0006 在全部附图中,使用相同的标号来标注同样的特征。 。
10、0007 图1图示了按照一个或多个实施例的、在其中可以利用这里描述的各种原理的操 作环境。 0008 图2图示了按照一个或多个实施例的示例性体系结构。 0009 图3描述了按照一个或多个实施例的、在顺序布局构建过程中的布局空间分配协 议。 0010 图4是描述按照一个或多个实施例的方法中的步骤的流程图。 0011 图5图示了按照一个或多个实施例的布局框的类层次。 0012 图6图示了按照一个或多个实施例的框构建器的类层次。 0013 图7图示了可以被使用来实施一个或多个实施例的示例性系统。 说 明 书CN 102804175 A 2/9页 5 具体实施方式 0014 综述 按照一个或多个实施例。
11、,布局处理以顺序的方式实施。布局过程被分成可以顺序地执 行的多个更小的步骤。在至少一些实施例中,布局构建器被结合栈使用以控制在结构化文 档的结构层次的各层次上的布局执行。不可变的数据结构被使用,并且允许顺序布局操作 的并行执行。在至少一些实施例中,可以完成布局序列的部分执行来产生可用的数据。这 里描述的技术可以结合任意类型的结构化文档一起被使用,作为例子而不是限制,结构化 文档诸如是HTML文档。 0015 在一个或多个实施例中,在布局构建器的影响下,顺序布局处理被组织为按一组 顺序的步骤执行的非递归树径(tree walk),所述的一组顺序的步骤诸如像“进入块”、“退 出块”、“构建行”等等。
12、。一个个步骤可以具有恒定的时间来执行,并且整个过程可以在一个 个步骤后被停止,以便产生可用于再现和用户交互的部分布局。 0016 在一个或多个实施例中,通过把在布局构建期间使用的临时数据与提供用于再现 和交互的布局结果的持久性数据进行分离,而将布局构建数据结构组织成达到高效紧致 性。临时数据由一组布局构建器代表,每种布局一个布局构建器。布局构建器是在布局处理 期间临时存在的临时对象。另一方面,持久性数据被表示为存储在最终得到的显示树中的 布局框,显示树可以被处理来呈现相关联的内容。这样做可以比过去更加高效地利用存储 器资源。例如,在HTML处理的上下文中,在任一特定时间存在的布局构建器的数量由。
13、HTML 文档的深度来限定,而不是由HTML文档的宽度来限定。因此,由布局构建器代表的临时数 据不必驻留在最终得到的显示树中。 0017 另外,被处理的数据和处理算法都以可伸缩的方式被组织。这允许任意的布局片 段的执行。这种顺序可伸缩性导致了对于可以被使用于回溯针对滚动、分页、栏目化等等的 尝试的算法的改进性能。 0018 此外,在至少一些实施例中,布局结果由被设计为不可变的布局框所代表。这使得 布局框能够在动态情景中被再次使用,动态情景诸如是渐增的部分更新、并行布局、渐进式 再现以及回溯布局执行。 0019 此外,在至少一些实施例中,在规定的、计算的以及已用值和结构之间强制分离。 这允许跨整。
14、个布局流水线的、部分的和可再次使用的计算。在HTML上下文中,规定的值涉 及在原始的HTML标记中如何规定值。这些值可能是矛盾的、不完整的和无效的。这些不一 致性可使规定的值很难利用。计算的值是与归一化属性和归一化值的组合相关联的。这些 值是不矛盾的且是可靠的。已用值代表在布局框中存储的值。 0020 在随后的讨论中,提供了标题为“操作环境”的章节,其描述了一种在其中可以利 用一个或多个实施例的环境。在这之后,标题为“示例性体系结构”的章节描述了按照一个 或多个实施例的示例性体系结构。接着,标题为“示例性方法”的章节描述了按照一个或多 个实施例的示例性方法。在这之后,标题为“实施细节”的章节描。
15、述了按照一个或多个实施 例的实施细节。最后,标题为“示例性系统”的章节描述了可以被使用来实施一个或多个实 施例的示例性系统。 0021 操作环境 图1图示了按照一个或多个实施例的操作环境,总地标为100。环境100包括计算设 说 明 书CN 102804175 A 3/9页 6 备102,其具有一个或多个处理器104、一个或多个计算机可读存储媒体106、和驻留在计算 机可读存储媒体上并可由处理器执行的一个或多个应用108。作为例子而不是限制,所述计 算机可读存储媒体可以包括典型地与计算设备相关联的、所有形式的易失性和非易失性存 储器和/或存储媒体。这样的媒体可以包括ROM、RAM、闪存、硬盘、。
16、可拆卸媒体等等。下面 在图7中显示和描述了计算设备的一个特定的例子。 0022 另外,计算设备102包括以web浏览器110形式的软件应用。可以使用任何适当 的web浏览器,其例子是从本文档的受让人和其它方可得到的。另外,计算机可读存储媒体 106可以包括顺序布局构建器111,其按上面和下面所描述的那样进行操作。顺序布局构建 器111可以被实施为可由应用108和浏览器110使用的独立的组件。替换地或另外地,顺 序布局构建器111可以被实施为应用108和/或浏览器110的一部分。 0023 在操作中,顺序布局构建器111允许诸如HTML文档这样的结构化文档的顺序处 理,以及允许布局以顺序的方式被。
17、计算。顺序布局构建器使用高效的体系结构,该体系结构 利用了布局构建器的用来监督布局处理的过程的用途、利用了熟知它们自己的针对内容处 理的要求的框构建器类型、以及利用了由框构建器类型的实例构建且持有最终要在显示器 或屏幕上再现的数据的相关联的布局框。 0024 另外,环境100包括诸如因特网那样的网络112,以及可以从其接收内容和向其发 送内容的一个或多个网站114。这样的内容可以包括诸如HTML文档的结构化文档,以及可 以由顺序布局构建器111如上面和下面描述的在其上进行操作的其它web内容。 0025 计算设备102可以被具体化为任何适当的计算设备,作为例子而不是限制,诸如 是台式计算机,便。
18、携式计算机,比如个人数字助理(PDA)、蜂窝电话那样的手持式计算机,等 等。 0026 已经描述了示例性操作环境后,现在考虑可以被使用来顺序地处理诸如HTML的 结构化文档的示例性体系结构的讨论。在下面的讨论中,使用HTML做为结构化文档的例 子。应当理解和明白,下面描述的技术可以结合其它类型的结构化文档一起被利用,而不背 离所要求保护的主题的精神和范围。 0027 示例性体系结构 图2图示了按照一个或多个实施例的示例性体系结构,总地标为200。在这个特定的 例子中,体系结构200包括布局构建器202、框构建器204、布局框206、容器框208和行框 210。另外,体系结构200包括可以在HT。
19、ML的顺序布局处理期间采取的动作212、214、216 和218的表示。该体系结构被使用来构建布局框的显示树,其中布局框包含内容或数据,诸 如文本、图像或图形元素,比如将要在屏幕或显示器上再现的顺序矢量图形(Svg)元素。 0028 在图示的和描述的实施例中,布局构建器202构成监督或组织整个顺序布局处理 的布局引擎或对象。布局构建器202负责实例化布局框206,然后与框构建器204进行通信 以务必使(see)布局框206被填充以要在屏幕或显示器上再现的内容。框构建器204是负 责构建特定类型的布局框的对象。特别地,有不同类型的框构建器,在204上只显示了其中 的一个。有用于构建表、图像、多色。
20、、行等等的框构建器。框构建器被特定地配置成构建特 定的一段内容。如本领域的技术人员所理解的,不同类型的内容具有不同的布局要求。每 个不同类型的框构建器熟知针对它的相关联的内容类型的不同布局要求,并能构建相对应 的一段内容。 说 明 书CN 102804175 A 4/9页 7 0029 在图示的和描述的实施例中,框构建器204是代表这些不同类型的构建器的共同 属性和方法的抽象类,并因此定义了框构建的通用联系(contact)。 0030 布局构建器202接收HTML文档并且顺序地移动穿过该文档,与框构建器204进行 通信,框构建器204进而又用它的内容来填充布局框206。在这个特定的例子中,容。
21、器框208 和行框210代表布局框206的子类别或子类。行框210代表对应于一行文本的个别情形。 容器框208是可包含诸如容器框和行框这样的其它框的框。诸如图像和Svg图元这样的内 容被作为容器框对待。 0031 动作212、214、216和218构成代表在顺序布局处理期间发生的一系列基本构建步 骤的动作或函数。这里,有四个动作:BuildLine(f)、EnterBlock(f)、ReEnterBlock(f)和 ExitBox(f)。所述函数加有代表布局构建器的缩写“LB”的前缀,因为它们被实施为这个类 的方法。针对这些方法中的每个方法的主要参数是当前的框构建器,其在图中由从框构建 器20。
22、4朝向所述方法中的每个的数据流箭头来反映。 0032 BuildLine(f) 这个方法对应于在其上构建一行文本的布局构建器202的基本步骤。这是可以由 布局构建器构建的内容的最小原子部分。要指出的是,所有可能的嵌套的块,诸如内联块 (inline block)、浮动物(floater)、或锚定在该行的绝对定位的块,并不在BuildLine函 数内部递归地构建。而是,它们作为该行的兄弟(sibling)经由EnterBlock/ExitBox回调 而被单独地构建。 0033 EnterBlock(f) 当布局构建器202遇到诸如DIV或TABLE的某个块元素的打开标签时执行这个方法。 0034。
23、 ReEnterBlock(f) 在块被前一页上的分页符中断后,当该块在后一页上被进入时,调用这个方法。 0035 ExitBox(f) 当布局构建器202到达块元素的结束标签时,或在当分段的(分页的)空间在页边界上 被中断时的情形下,执行这个方法。 0036 在操作中,布局处理被组织为对应于HTML的基本结构单元(即,纯文本的元素标 签或顺串(run)的一系列步骤。布局构建器202接收HTML文档且一个接一个地读取这些 单元,并执行适当的动作。当布局构建器遇到打开标签时,它识别其类型、创建适当的类型 特定的框构建器(比如框构建器204)、以及通过将所述框构建器推给构建栈来激活该框构 建器。然。
24、后所述类型特定的框构建器将控制针对特定元素构建布局内容的过程。当布局构 建器遇到元素的关闭标签时,它与活动的、类型特定的框构建器通信以使得最终得到的布 局框被完成并被附连到显示树上。在这个过程期间,当遇到一行文本时,行框形式的布局框 (比如行框210)被创建并被插入到显示树中。 0037 图3在某些方面与图2类似,其描述了按照一个或多个实施例的、在顺序布局构建 过程中的布局空间分配协议300。该图也代表可扩展性模型。图3描述了在通用布局构建 器和多个特定框构建器之间的协议。可扩展性通过简单地将新的框构建器类型插入到协议 中,而在想要新的布局类型的事件中变得容易。如将在下面更详细地描述的,所述协。
25、议使用 了一组虚拟函数,该组虚拟函数被定义为框构建器的抽象类。不同类型的框构建器可以不 同地实施这些虚拟函数。从布局构建器的观点来看,这些函数中仅有少数函数看起来是和 说 明 书CN 102804175 A 5/9页 8 布局构建器一样的。如上面所指出的,它们的实现取决于框构建器类型而不同。当布局构 建器贯穿HTML进行处理时,以及当它遇到标签和其它内容时,它在相关联的框构建器上调 用相应的函数。当布局构建器移动穿过特定标签的内容时,它可以在框构建器上酌情调用 这些不同的函数,使框构建器能执行它的构造,以使得相关联的容器框被构建并为显示作 准备。然而,在各段HTML内容之间移动的过程由相关联的。
26、个体的框构建器控制,所述框构 建器明确地熟知所述内容的结构。 0038 在图示的和描述的实施例中,协议300包括布局构建器302、ContainerBox. BoxBuilder(容器框.框构建器) 304、ContainerBox.BoxBuilder 306和容器框308。 0039 如以上所讨论的,布局构建器302代表组织整个布局构建过程的对象。布局构建 器302与由图中的ContainerBox.BoxBuilder 304代表的各个框构建器一起工作。如以上 所指出的,ContainerBox.BoxBuilder是一种抽象类,其定义框构建器的许多具体的子类型 要遵循的总合同(gene。
27、ral contract)。它定义了布局构建器302在不同的构建步骤期间调 用的一组虚拟回调,这里被描绘为列举的椭圆。 0040 下表描述了在椭圆的列举和它的相关联的虚拟函数之间的关联。在表的下面,描 述了每个虚拟函数。 椭圆列举虚拟函数名 1 CBB.Constructor 2 CBB.MoveToNextPosition 3 CBB.GetChildBoxToReuse 4 CBB.OnChildBoxReuse 5 CBB.OnChildBoxEntry 6 CBB.OnChildBoxExit 7 CBB.Destructor 8 CBB.InitializeBoxSizing 9 C。
28、BB.CompleteBoxSizing 0041 表1 CBB.Constructor 该虚拟函数是回调,其在ContainerBox.BoxBuilder 304被创建时被调用来初始化 它,并将它置于当前的布局构建过程的上下文中。 0042 CBB.MoveToNextPosition 该虚拟函数是回调,被调用来请求布局构建器302要处理的随后的位置。该回调给予 ContainerBox.BoxBuilder在任意希望的方向上引导布局构建过程的选项。例如,它可以被 使用于数次格式化相同的内容(例如,用于内容测量或滚动条分配或列平衡目的)。这个回 调的结果应当是布局构建器302要处理的下一个。
29、块。要指出的是,该虚拟函数可以在不同 的框构建器中不同地实施。这允许可扩展性,以及如果需要的话允许以不同方向和不同顺 序导航通过内容。 0043 CBB.GetChildBoxToReuse 该回调被布局构建器302使用来询问某个已存在的框是否可以被再次使用于给定的 块。已存在的框可在渐增更新情景中找到,比如当布局的大的部分保持不变而只有小的子 树被修改和重新格式化时。 0044 CBB.OnChildBoxReuse 当找到可再次使用的框时调用这个回调,并且其应该被当前的ContainerBox. 说 明 书CN 102804175 A 6/9页 9 BoxBuilder插入到新的布局树结构。
30、中。 0045 CBB.OnChildBoxEntry 当针对当前的块没有找到可再次使用的框并且整个框要被再次重新构建时调用这个 回调。为此目的,布局构建器302通知父框构建器有关子框输入。在这样的通知后,针对 子块的新的框构建器将被创建、被推到栈上并成为当前的框构建器,以使得布局构建器302 将在嵌套的层上继续它与框构建器的通信,直到到达所述块的终点。 0046 CBB.OnChildBoxExit 该回调被使用来通知父框构建器:它的子框之一的构建已结束,并且该子框可以被附 连到父框上从而进入最终得到的布局树。父框构建器更新可用的布局空间来为分配下面的 框(如果有的话)作准备。 0047 C。
31、BB.Destructor 该回调通知框构建器:布局构建器302已经到达它的终点,并即将把它从上下文栈中 弹出。在此刻,框构建所需的所有过渡期数据将被释放。 0048 CBB.InitializeBoxSizing 这是一个回调,其被父框构建器从OnChildBoxEntry回调中调用,以便在进入到嵌套 的子层前给出指派给其子框的空间。 0049 CBB.CompleteBoxSizing 这是回调,其被父框构建器从OnChildBoxExit回调中调用来最终确定子框的大小调 整。 0050 示例性方法 图4是描述按照一个或多个实施例的方法中的步骤的流程图。该方法可以结合任何适 当的硬件、软件。
32、、固件或它们的组合来实施。在至少一些实施例中,该方法可以由适当地配 置的顺序布局构建器比如图1中的顺序布局构建器111来实施。 0051 步骤400接收结构化文档。可以接收任何适当类型的结构化文档。在至少一些实 施例中,结构化文档包括HTML文档。另外,该步骤可以以任何适当的方式执行。例如,该步 骤可以通过响应于用户动作来接收HTML文档而被执行,用户动作比如是使用浏览器请求 网页。一旦接收到结构化文档,顺序布局处理就可以开始。于是,步骤402遇到结构化文档 中的打开标签。步骤404创建相关联的框构建器。在上面提供了框构建器的例子。步骤 406创建相关联的布局框。在图示的和描述的实施例中,各个。
33、框构建器类型熟知如何构建它 们与之相关联的内容。该内容在上面被称为持久性数据被置于布局框中,并构成 要在显示屏上再现的内容。 0052 步骤408使用框构建器来顺序地处理结构化文档,并用可再现的内容填充布局 框。在其顺序处理期间,步骤410确定随后的标签是否是与打开标签相关联的关闭标签。如 果不是,则该方法返回到步骤408继续顺序处理。另一方面,如果随后的标签是与打开标签 相关联的关闭标签的话,步骤412使得布局框插入到显示树中。 0053 此时,如果结构化文档有更多的剩余,则该方法可以返回到步骤402且继续处理 该文档。如果该文档没有更多剩余,则该方法可以终止,以及在对应的显示树中的内容可以。
34、 被再现。 0054 已经在按照一个或多个实施例的示例性方法中进行了描述,现在考虑按照一个或 说 明 书CN 102804175 A 7/9页 10 多个实施例的一些实施细节。 0055 实施细节 在下面的章节中,描述了实现的不同方面。该材料为上面讨论的内容做了补充和添加 了细节。首先,标题为“从布局结果数据中分离布局构建数据”的章节描述了处理效率可以 如何通过数据分离技术来达到,所述数据分离技术至少部分地通过上面描述的体系结构而 变为可能。接着,标题为“布局构建状态机”的章节描述了按照一个或多个实施例的状态机 的诸方面。在这之后,标题为“布局框不可变性”的章节描述了不可变的布局框的诸方面。 。
35、最后,标题为“内容计算”的章节描述了与规定的值、计算的值和已用值相关联的一些细节。 0056 从布局结果数据中分离布局构建数据 在未由当前所描述的方案采用的递归算法方案中,组织的临时数据通常在执行栈上被 作为递归地调用的函数的局部变量来分配。这对资源利用(比如存储器使用)产生不利影 响。在图示的和描述的顺序方案中,数据栈被使用于存储这样的临时数据或“布局构建上下 文”。然而,这个方案并不仅仅是广义的数据存储。而是,数据栈被组织为分层地嵌套的框 构建器,正如上文所述的。回想上面的讨论,每一类型的布局元素(诸如框、表、图像、浮动物 等等)使用它们自己的构建布局的逻辑和它们自己的临时数据组。类型特定。
36、的框构建器是 实施和封装这样的特定数据和布局构建逻辑的对象。 0057 在图示的和描述的实施例中,每一类型的HTML元素如上所述地使用它自己的显 示对象或布局框。布局框存储布局大小调整和定位结果,并被使用来适当地再现所述元素 的内容。 0058 因此,按照本发明的方案,在布局构建器中使用数据结构二元性(duality)。具体 地,框构建器充当在布局构建过程中被使用的活动的易变对象,而布局框充当稍后在再现 和用户交互中将使用的、布局构建的最终的不可变结果。 0059 在图示的和描述的实施例中,按照各种各样类型的布局元素的CSS定义而定义了 布局框的类层次。这在图5中进行了图示,并将被本领域的技术。
37、人员所理解。 0060 平行于布局框的层次,存在针对框构建器的类的平行的层次。在面向对象的实现 中,框构建器类被定义为嵌套在适当的布局框中以便允许其在构建框的过程中访问它们的 私有成员。框构建器层次在图6中显示,并将被技术人员所理解。 0061 布局构建状态机 如以上所指出的,每个框构建器具有它自己的逻辑,它使用该逻辑来构建布局。然而, 框构建器具有一些共同的特性。一个可以非常有用的共同特性是:构建过程可以被中断和 恢复、被重置到起点和从任何的任意点重新开始。这种能力可以被有效地利用(leverage) 于诸如用于分页的布局片段、用于滚动条尺寸调整的布局迭代、用于列平衡的布局回溯等 等这样的过。
38、程。 0062 为此,框构建器被组织为有限状态机,其依赖于它们当前正在处理的内容项目的 属性从一个状态过渡到另一个状态。这样的状态机中的一些状态机相当简单(例如,未被 设想为有任何要布置的内容的已替换框),然而另一些状态机可能非常地复杂(例如,处置 包含静态块、txt行、内联块、浮动物、绝对定位块的“完全堆叠的上下文”,以及同时操控 诸如滚动条定位、尊重(respect)类似“orphans(孤立行)”、“widows(未排足的行)”、 “keep-together(保持在一起)”、“keep-with-next(与下一个一起)”等等的片段属性这样 说 明 书CN 102804175 A 10。
39、 8/9页 11 的布局的诸方面)。这一切可以使得布局构建的逻辑相当复杂,而状态机方案简化了它的组 织,并允许诸如中断、恢复、重置、重新开始等等这样的过程。此外,状态机方案很好地适合 于布局构建器的逻辑的顺序性质。 0063 布局框不可变性 在定义用于代表布局结果的数据结构时,可能希望将定位数据与内容及它的大小调整 进行分离。这制造了在随后的和并行的布局构建过程的不同位置中再次使用相同的布局框 的可能性。 0064 为此原因,布局框被组织成仅包含它们的内部定位的内容和大小调整信息,而不 包含它们的定位信息。另外,布局框被设计成不可变的,以使得在多个布局过程中再次使用 框就如采用对它们的新的引用。
40、一样简单。 0065 内容计算 为了使布局构建更加高效,可以在布局开始前计算不依赖于可用的布局空间的值,并 将之作为计算的内容高速缓存(cache)而存储在源标记树中(作为纯粹地函数相关的数 据)。这允许在随后的针对不同的可用空间的布局构建期间多次地再次使用这个重新计算 的数据。 0066 在上面描述的布局构建器方案中,“计算的内容”的抽象概念被定义为仅依赖于内 容属性而不依赖于任何空间特性(如视口(viewport)大小)的数据。有几种具体的计算的 内容的子类型,例如计算的样式、针对表的模式修补结构(schema fix-up structure)、弹 性框(flex box)、生成的内容、。
41、列表标记、首字母、以及插入(run-in)。为了与原始的内容和 计算的内容一起工作,布局构建器被设计成使得其使用布局节点的抽象概念,所述抽象概 念使原始内容和计算的内容统一。这样的组织允许按需要对计算的内容进行预先计算,并 使得布局构建器逻辑与它处置的是哪种内容无关。这样的方案可以增强性能并缓解与重复 计算相关联的问题。 0067 因此,上面描述的体系结构允许HTML文档的顺序布局处理。这个方案比上面提到 的递归方案更加高效,因为它允许更细粒度的外部控制。作为例子,考虑下面内容。 0068 不同于不可以被中断、恢复或从不同的位置开始的递归,上面和下面描述的顺序 布局处理可以被任意地停止和恢复。。
42、顺序布局处理还允许有用整体递归更加难以实现的高 效的技术。例如,布局构建器202(图2)可以在HTML文档内的任意位置处开始它的工作。 例如,布局构建器可以从大的HTML文档的中间开始处理,继续进行布局处理并在HTML文档 的终点之前停止。这样做可以产生有用的、可再现的内容。 0069 与此稍微有关的是如下事实:在布局框206中出现的结果可以在针对HTML文档的 顺序布局处理完成之前被使用。这在整体执行是处于单线程环境中的上下文中会是所希望 的。此外,当被顺序地组织时,漫长的布局过程可以在任何步骤之间被暂停以便再现当前的 显示结果,然后恢复以完成布局的剩余部分。这可以通过使得布局结果更早地可用。
43、于用户 交互而改进HTML布局的可用性,由此产生更好的感知性能。 0070 另外,顺序布局处理可以在并行执行环境中被利用(leverage)。具体地,当多个 CPU可用时,并发的(concurrent)布局构建器可以被使用来处理HTML文档的不同部分并加 入结果以产生完整的显示树。 0071 已经描述了各种顺序布局构建器实施例,现在考虑可以被使用来实施一个或多个 说 明 书CN 102804175 A 11 9/9页 12 上面描述的实施例的示例性系统。 0072 示例性系统 图8图示了可以被使用来实施上面描述的各种实施例的示例性计算设备700。计算设 备700例如可以是图1的计算设备102。。
44、 0073 计算设备700包括一个或多个处理器或处理单元702、一个或多个存储器和/或存 储组件704、一个或多个输入/输出(I/O)设备706、以及允许各种组件和设备彼此通信的 总线708。总线708代表若干类型的总线结构中的任意的一种或多种,包括存储器总线或存 储器控制器、外围总线、加速图形端口、和使用各种各样的总线体系结构中的任意一种的处 理器或本地总线。总线708可以包括有线的和/或无线的总线。 0074 存储器/存储组件704代表一个或多个计算机存储媒体。组件704可以包括易失 性媒体(比如随机存取存储器(RAM)和/或非易失性媒体(比如只读存储器(ROM)、闪存、光 盘、磁盘等等)。
45、。组件704可以包括固定的媒体(例如,RAM、ROM、固定的硬驱动机等等)以及 可拆卸的媒体(例如,闪存驱动机、可拆卸的硬驱动机、光盘等等)。 0075 一个或多个输入/输出设备706允许用户将命令和信息输入到计算设备700,并且 还允许信息被呈现给用户和/或其它的组件或设备。输入设备的例子包括键盘、光标控制 设备(例如,鼠标)、话筒、扫描仪等等。输出设备的例子包括显示设备(例如,监视器或投影 仪)、扬声器、打印机、网卡等等。 0076 这里,在软件或程序模块的一般上下文中描述了各种技术。通常,软件包括执行特 定的任务或实施特定的抽象数据类型的例行程序、程序、对象、组件、数据结构等等。这些模 。
46、块和技术的实现可以被存储在某种形式的计算机可读媒体上,或被跨越某种形式的计算机 可读媒体进行传送。计算机可读媒体可以是可由计算设备访问的、任何可用的介质或媒体。 作为例子而不是限制,计算机可读媒体可包括“计算机可读存储媒体”。 0077 “计算机可读存储媒体”包括以任何方法或技术实施的、用于存储诸如计算机可读 指令、数据结构、程序模块或其它数据这样的信息的易失性和非易失性、可拆卸和不可拆卸 的媒体。计算机可读存储媒体包括,但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、 CD-ROM、数字多功能盘(DVD)或其它光学存储装置、盒式磁带、磁带、磁盘存储装置或其它的 磁存储设备、或可。
47、被使用来存储想要的信息并可被计算机访问的任何其它的介质。 0078 总结 已经描述了布局处理技术,所述布局处理技术允许实施结构化文档的处理,并允许以 顺序的方式完成相关联的布局。布局过程被分成可以顺序地执行的多个更小的步骤。在至 少一些实施例中,布局构建器被结合栈使用以控制在诸如HTML文档这样的结构化文档的 结构层次的各个层次上的布局执行。不可变的数据结构被使用,并且其允许顺序布局操作 的并行执行。在至少一些实施例中,可以完成布局序列的部分执行来产生可用的数据。 0079 尽管本主题是以特定于结构特征和/或方法动作的语言被描述的,但应当理解在 所附权利要求中限定的主题不是必需局限于上述的特定。
48、特征或动作。而是,上述的特定特 征和动作是作为实施权利要求的示例性形式而公开的。 说 明 书CN 102804175 A 12 1/7页 13 图 1 说 明 书 附 图CN 102804175 A 13 2/7页 14 图 2 说 明 书 附 图CN 102804175 A 14 3/7页 15 图 3 说 明 书 附 图CN 102804175 A 15 4/7页 16 图 4 说 明 书 附 图CN 102804175 A 16 5/7页 17 图 5 说 明 书 附 图CN 102804175 A 17 6/7页 18 图 6 说 明 书 附 图CN 102804175 A 18 7/7页 19 图 7 说 明 书 附 图CN 102804175 A 19 。