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 II、NexusS 4G等Android手機上。
Firefox的橫空出世在很多人的意料之外,其體積小巧功能強大,在安全性、擴充套件性和可移植性上都有驚人的表現。
瀏覽器的複雜度可以和作業系統相提並論,mozilla有數百萬行的C++程式碼。這樣複雜的軟體,其中到底使用了那些祕技呢?其實,好的設計總是遵循一些眾所周知的設計準則,套句俗語說,差的設計千差萬別,好的設計都一個樣。Mozilla當然也是遵循了這些設計準則,不過,在實現方法上卻有很多創新之處,讓人驚歎不已。
本文以Mozilla的Firefox設計準則來分析Mozilla的架構設計:
1. 分離介面和實現
我們知道,使用者介面是最容易變化的,也是最難於自動測試的。應用程式開發者根據系統提供的API自己組織簡單的邏輯關係來實現不同的應用功能,這就需要分離使用者介面和內部邏輯設計。在這一方面,mozilla算是非常前衛了:用標記語言(XUL)開發介面,用程式語言來實現(C++)內部邏輯,再用指令碼語言(javascript)把兩者膠合起來。XUL的介面描述能力,javascript的簡潔性和C++的效能完美的結合在一起了,mozilla把三者的長處發揮到了極致。它們的關係如下圖所示:
XUL這是一種用XML來描述使用者介面的語言。用XML描述使用者介面已經不是什麼新鮮事了,像Qtdesigner和Glade都是用XML檔案格式來存放使用者介面描述的,但它們都只是純粹的介面描述。而XUL同時描述了事件處理、風格(style)和字串國際化等資訊,可以直接被mozillalayout引擎解析執行。
XBL這種稱為擴充套件繫結語言(ExtensibleBindingLanguage)的東東也是mozilla的一大特色,現在已經被W3C作為標準了。作為程式設計師,我們都知道公共函式庫的重要性,公共函式庫可以反覆重用,從而提高開發效率。在開發使用者介面時,也會遇到同樣的問題,很多介面都比較類似,拷貝/貼上當然很容易,但以後維護起來就麻煩了。而XUL並沒有提供重用機制,XBL剛好彌補了它的不足。在XUL中可以只描述具有共性的部分,而由XBL對它進行擴充套件。XBL的功能強大,自身也有組合和繼承機制,這大大提高了可重用性。
CSS我們知道CascadingStyleSheets在網頁中已經應用多年了,而在瀏覽器本身實現中使用倒是很少聽說。這也沒有什麼奇怪的,像GTK+中的RC和CSS功能都差不多,也就是說GNOME應用程式一直都在使用類似於CSS的東西。有了CSS,把應用程式的介面視感(lookandfeel)與功能獨立開來,讓兩者可以獨立變化,這是非常自然的事了。不過CSS在這裡,除了可以修改介面風格外,還可以把XBL和XUL關連起來,以完成對XUL的擴充套件。
DTD(Document Type Definition)常用來定義標記(MarkupLangugae)語言的語法,功能上與BNF是等價的。不過它在這裡,不是為了定義某種語言的語法,而是完成字串的本地化,只是借了DTD中的實體(Entity)展開機制罷了。這看起來有些大材小用,不過在XML中使用DTD實體來替換要翻譯的字串,沒有比這更好的辦法了。
property在XUL中用DTD來做字串本地化,雖然是妙著一招,可是在javascript裡它就沒有用武之地了。這回該輪到property上場了,在nsIStringBundle介面的幫助下,javascript可以方便的從property檔案中取到所要的字串。
Javascript在XPConnect的支援下,Javascript也可以用來開發COM元件,可以實現任何功能。不過膠合使用者介面(XUL)和內部邏輯才是它最拿手的好戲。當然,其中文件物件模型(DOM)起了非常關鍵的作用,Javascript通過文件物件模型(DOM)來操作XUL中的元素。
相關文章
- Ubuntu 系統中通過火狐OS模擬器輕鬆體驗 Firefox OSUbuntuFirefox
- 一、Linux系統的簡介Linux
- 作業系統-第一章-系統簡介作業系統
- Firefox瀏覽器完美執行Firefox OSFirefox瀏覽器
- 作業系統簡介作業系統
- Linux 系統簡介Linux
- 【系統】lsof命令簡介
- 【系統】lsof 命令簡介
- 智慧導覽系統簡介之點位標註
- 【python】os模組 的用法簡介Python
- 1.3作業系統簡介作業系統
- 作業系統核心簡介作業系統
- 自制 os 極簡教程1:寫一個作業系統有多難作業系統
- 【Zeekr_Tech】汽車軟體RTOS-之AUTOSAR OS多核控制簡介
- Firefox OS App開發及部署FirefoxAPP
- Linux-5.10原始碼之網路系統簡介:Linux原始碼
- 【Android系統】Android系統架構簡介Android架構
- 鴻蒙系統freeModbusTcp移植簡介鴻蒙TCP
- MySQL許可權系統簡介MySql
- oracle 系統使用者簡介Oracle
- 作業系統中程式簡介作業系統
- Bootstrap 3 網格系統簡介boot
- Linux檔案系統簡介Linux
- Linux系統分割槽簡介Linux
- AIX系統級命令簡介(轉)AI
- Linux系統管理簡介(轉)Linux
- 簡單介紹一下 Linux 檔案系統?Linux
- 在Mac OS系統中安裝Python【流程簡單】MacPython
- Linux系統管理——Linux簡介Linux
- web伺服器管理系統簡介Web伺服器
- 分散式跟蹤系統zipkin簡介分散式
- Slack系統架構簡介 - jinlow架構
- Kubernetes系統架構簡介架構
- UNIX 系統中的文字操作簡介
- 智慧手機作業系統簡介作業系統
- 深入淺出Android Gradle構建系統(一:簡介)AndroidGradle
- QPM 之簡介
- ELK之簡介