Firefox OS之系统简介(一)

来源:互联网 发布:西门子s71500编程手册 编辑:程序博客网 时间:2024/05/20 13:14

      Firefox OS,也即B2G系统。B2G是“Boot To Gecko”的缩写,是Mozilla公司基于Web标准开发的完全开放的移动操作系统,从系统本身到应用程序完全由HTML5、CSS和JS来写的。这里要提一句,基于Web标准和必须要联网之间并非充要关系。 比如我们在使用浏览器的截图插件、Readability插件、愤怒的小鸟、植物大战僵尸等应用和游戏的时候,并不需要联网。主要由3个部分组成,UI部 分叫做Gaia,名字出自希腊语“大地”,也被称作“万物之母”;采用Mozilla引以为豪的Gecko引擎,Gecko就是上图中那只眼睛大大长的很 萌的绿色小蜥蜴;底层部分叫做Gonk,名字来自一种在60年代盛行美国的毛绒玩具。

 Mozilla与MWC 2012上宣布正式和西班牙电信联手,有望今年下半年推出首款B2G手机。B2G将采用linux内核和部分Android技术,B2G目前已经被移植到了GalaxyS IINexusS 4GAndroid手机上。

Firefox的横空出世在很多人的意料之外,其体积小巧功能强大,在安全性、扩展性和可移植性上都有惊人的表现。

     浏览器的复杂度可以和操作系统相提并论,mozilla有数百万行的C++代码。这样复杂的软件,其中到底使用了那些秘技呢?其实,好的设计总是遵循一些众所周知的设计准则,套句俗语说,差的设计千差万别,好的设计都一个样。Mozilla当然也是遵循了这些设计准则,不过,在实现方法上却有很多创新之处,让人惊叹不已。

本文以Mozilla的Firefox设计准则来分析Mozilla的架构设计:

1. 分离界面和实现

      我们知道,用户界面是最容易变化的,也是最难于自动测试的。应用程序开发者根据系统提供的API自己组织简单的逻辑关系来实现不同的应用功能,这就需要分离用户界面和内部逻辑设计。在这一方面,mozilla算是非常前卫了:用标记语言(XUL)开发界面,用编程语言来实现(C++)内部逻辑,再用脚本语言(javascript)把两者胶合起来。XUL的界面描述能力,javascript的简洁性和C++的性能完美的结合在一起了,mozilla把三者的长处发挥到了极致。它们的关系如下图所示:

      

XUL这是一种用XML来描述用户界面的语言。用XML描述用户界面已经不是什么新鲜事了,像QtdesignerGlade都是用XML文件格式来存放用户界面描述的,但它们都只是纯粹的界面描述。而XUL同时描述了事件处理、风格(style)和字符串国际化等信息,可以直接被mozillalayout引擎解析执行。

XBL这种称为扩展绑定语言(ExtensibleBindingLanguage)的东东也是mozilla的一大特色,现在已经被W3C作为标准了。作为程序员,我们都知道公共函数库的重要性,公共函数库可以反复重用,从而提高开发效率。在开发用户界面时,也会遇到同样的问题,很多界面都比较类似,拷贝/粘贴当然很容易,但以后维护起来就麻烦了。而XUL并没有提供重用机制,XBL刚好弥补了它的不足。在XUL中可以只描述具有共性的部分,而由XBL对它进行扩展。XBL的功能强大,自身也有组合和继承机制,这大大提高了可重用性。

CSS我们知道CascadingStyleSheets在网页中已经应用多年了,而在浏览器本身实现中使用倒是很少听说。这也没有什么奇怪的,像GTK+中的RCCSS功能都差不多,也就是说GNOME应用程序一直都在使用类似于CSS的东西。有了CSS,把应用程序的界面视感(lookandfeel)与功能独立开来,让两者可以独立变化,这是非常自然的事了。不过CSS在这里,除了可以修改界面风格外,还可以把XBLXUL关连起来,以完成对XUL的扩展。

DTD(Document Type Definition)常用来定义标记(MarkupLangugae)语言的语法,功能上与BNF是等价的。不过它在这里,不是为了定义某种语言的语法,而是完成字符串的本地化,只是借了DTD中的实体(Entity)展开机制罢了。这看起来有些大材小用,不过在XML中使用DTD实体来替换要翻译的字符串,没有比这更好的办法了。

propertyXUL中用DTD来做字符串本地化,虽然是妙着一招,可是在javascript里它就没有用武之地了。这回该轮到property上场了,在nsIStringBundle接口的帮助下,javascript可以方便的从property文件中取到所要的字符串。

JavascriptXPConnect的支持下,Javascript也可以用来开发COM组件,可以实现任何功能。不过胶合用户界面(XUL)和内部逻辑才是它最拿手的好戏。当然,其中文档对象模型(DOM)起了非常关键的作用,Javascript通过文档对象模型(DOM)来操作XUL中的元素。

原创粉丝点击