浏览器参考架构

概要

参考架构描述各种浏览器共有的基本子系统以及这些子系统之间的关系。参考架构有助于维护和设计:能够帮助理解系统,帮助分析不同设计选项的优缺点,可以作为新系统设计和旧系统重构的参考模板。本文将探讨浏览器的历史,以及促使它不断进化的个中缘由。我们基于两个著名的开源实现提出了浏览器的参考架构,并通过另外两个实现来验证该架构。最后探讨我们对该领域的观察以及浏览器的进化史。我们特别注意到,浏览器对开源组件的重要重用,以及由于广泛的web标准使浏览器“趋同进化”。

关键词:软件架构,参考架构,软件进化,组件重用,浏览器

1 引言

     某个领域的参考架构揭示了该领域现有系统共有的子系统,以及这些子系统之间的关系。它能够帮助理解现有系统,有的系统是没有它自己的架构文档的。参考架构指明设计和实现中可以重用的部分,可以作为设计新系统的参考模板。很多成熟的软件领域,比如编译器、操作系统,都有参考架构,但浏览器目前还没有。
     浏览器可能是历史上使用最广泛的软件,在过去的15年中,不断进化。今天,浏览器运行在各种各样的设备上,包括手机、平板电脑、普通PC等。浏览器参考架构实现者在设计新系统是做出权衡,也能够帮助维护者理解现行代码。
     在本文中,我们通过分析两个现有的开源系统,提出了浏览器参考架构,然后通过另外两个实现来验证我们的发现。我们解释了浏览器的进化史怎么样影响参考架构,揭示了能帮助解释目前趋势的背后的现象。尽管我们是在浏览器上下文来表达我们的发现,但我们相信我们的发现代表着更通用的进化模式,这也适用于其它领域。

2 浏览器领域

     万维网(WWW)是基于互联网的共享信息系统。浏览器通过使用状态无关的匿名协议(stateless and anonymous protocol)HTTP从远程web服务器上获取内容并显示。网页由HTML编写而成。可能还是用了一些其它技术进行扩展,例如CSS,用于添加额外的布局和风格信息,JavaScript,允许在客户端进行计算。当遇到无法处理的内容时,浏览器会调用插件来处理,例如Java applets。浏览器一般都包括:书签、历史、密码管理、以及帮助残疾人使用的功能。
     Tim Berners-Lee在1991年写了第一个浏览器。它是文本界面的而且是一个HTML编辑器。1993年,一个易用,图形界面的浏览器,Mosaic发布了,而且一家叫做Sypglass的公司成立并商业化该浏览器的技术。然而,该程序的作者,后来离开并创建了自己的公司,Netscape。1994年,W3C组织成立,以提升web技术的互操作性。1995年,微软发布了IE(基于Spyglass的代码授权),由此开始了浏览器的激烈竞争时期,众所周知的“浏览器大战”。最终,微软控制了市场,Netscape在1998年开放了它的浏览器源代码,命名为Mozilla。非开源的Opera也诞生于那个时候(mid-1990s)。图 - 1显示了几个流行的浏览器发布的时间点。
浏览器参考架构_第1张图片
http://visualwebz.com/website-developer-articles/website-browser-history.html
     出现了大量不同的Mozilla版本,它们重用浏览器核心,但为用户层面的功能提供了不同的设计决策。Firefox也是源自Mozilla的一个独立浏览器,与以往复杂的Mozilla相比,它要简洁的多。开源的Konqueror也被重用。Apple已经把它的子系统集成进OS X浏览器,Safari中,Apple对该子系统的改进转而又被其它的浏览器重用。不开源的IE引擎也被重用:Maxthon,Avant。 省略部分内容... 下面进入正题

3 Deriving 参考架构

基于两个不同的浏览器的源码和可利用的文档,我们得出了浏览器的参考架构。我们挑选了两个成熟的浏览器实现,对每一个浏览器,基于领域知识和可利用文档,提出了概念架构。
浏览器参考架构_第2张图片
通过使用QLDX逆向工程工具包,从每个系统的源码中抽出了具体的架构,并用于改善概念架构。然后基于改善的概念架构提出了参考架构,并且通过另外两个浏览器的实现来验证它。我们得出的参考架构如图 - 2所示。它由8个子系统加上它们之间的依赖组成:(1) User Interface; (2)Browser Engine, 一个可嵌入组件,提供查询和操作Rendering Engine的高层接口(Android中的WebView); (3) Rendering Engine, 负责HTML文档的解析和布局; (4)网络子系统; (5)JavaScritp解释器; (6) XML解析器; (7) Display Backend, 提供绘制界面的API(8) Data Persistence, 存储与浏览回话相关的各种数据。
下面详细讨论Mozilla的架构。
Mozilla的关键设计目标是:支持web标准,支持跨平台,快速网页渲染。与参考架构对应的Mozilla的概念架构如图-3所示。
浏览器参考架构_第3张图片
User Interface被分成两个子系统,其中的一部分可以被Mozilla suit中的其它应用程序使用,例如mail/news客户端。Mozilla profile机制提供了data persistence,它用来存储高层数据,例如书签,低层数据,例如网页缓存。Mozilla的渲染引擎比其它浏览器的更大更复杂。原因之一是,它具备出色的对不规则和不完整HTML解析和渲染的能力。另一个原因是它支持跨平台的User Interface。UI由平台独立的Extensible User Interface Language(XUL)编写, XUL又由适应组件映射到特定平台的库。这一点是和其它浏览器不同的,它们直接使用与平台相关的显示和控件库。

4 验证参考架构

通过Lynx验证上面的参考架构,省略。。。

5 总结和相关工作

     有很多原因会导致一个浏览器不同于我们的参考架构。处于简洁考虑,参考架构中的一些子系统可能被实现为一个单独的子系统,同时,为了提供巨大的灵活性,其它子系统又可能跨越多个子系统。也可能添加新的子系统以提供额外的功能,为了使浏览器更轻,又可能删除了某些子系统。
     表1显示了几个浏览器的多个统计数据。
浏览器参考架构_第4张图片
Konqueror代码只有Mozilla的四分之一左右,但它与Mozilla有几乎一样的标准兼容水平。Lyns比其它浏览器要小的多,不过仍然是Links的5倍那么大,Links是最近出现的文本界面浏览器。我们没法获知Safari确切信息,因为它有的组件是闭源的。表中显示的仅仅是开源部分的大小。我们目前正在研究Mosaic, Dillo, 和Galeon浏览器这些浏览器架构,希望得针对嵌入式设备的浏览器架构。
     很多领域都提出了自己的参考架构,包括实时火车控制系统,航空电子,web服务器。生产线构架也类似于参考架构。

6 结论

     我们已经观察到了许多有趣的进化现象;即,不断变化的领域界限;驱同进化;开源与闭源紧密相连。
     随着浏览器的发展,它的概念边界 -- 无论外部还是内部 -- 都有了更多的定义。人们对这些边界的界定看法不一。微软宣称IE是操作系统的一部分,它为其它应用程序提供渲染功能。这给第三方浏览器,比如与IE竞争激烈的Netscape,带来一些问题。类似的,为了提升竞争力,Mozilla, Netscape这些浏览器都已经集成了电子邮件、新闻组、ftp客户端这些功能。浏览器也被移植到嵌入式设备,在这些资源有限的设备上,就不太适合部署很多功能。不过,一切都在发展。
     大量致力于创造高质量开源浏览器的努力对该领域带来了有趣的影响。浏览器大战期间,为了吸引用户,许多专属扩展被添加进浏览器核心。而如今,日益强烈的兼容标准的压力促使各浏览器重用核心组件,转而在用户层提供不同的体验。然而,用户层功能很容易被山寨;例如,曾经是创新功能的标签页浏览和弹窗阻止,现在已经司空见惯。这些观察结果,揭示了一个现象,浏览器正趋同进化。
     现在,有不少成熟的浏览器组件可以免费使用,这使得开源与闭源开发方法联系更紧密。Mozilla的开源引擎被大量应用程序重用,有开源的也有闭源的。类似的,Konqueror的开源引擎被用作Safari的基石。尽管没有授权要求,Apple还是把它对开源组件的变更反馈给了社区。相反的,不开源浏览器引擎的代表IE,也能够被嵌入进其它开源产品中,即所谓的双核浏览器,这提供给用户在两个核心之间快速切换的能力。
     我们之前也看到过开源与闭源组件组合的例子,例如,linux内核中的闭源二进制模块。我们相信开源核心与闭源核心的多样化组合将使浏览器领域独特而有趣。



原文:http://grosskurth.ca/papers/browser-refarch.pdf

你可能感兴趣的:(浏览器参考架构)