Firefox OS之系統簡介(一)

      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中的元素。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章