日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Mozilla研究—mozilla中的設(shè)計(jì)亮點(diǎn)...

 xiaoqdu 2008-11-24

mozilla 是一個(gè)以瀏覽器為中心的軟件平臺(tái),它在我們平臺(tái)中占有重要地位。我們用它來(lái)實(shí)現(xiàn)WEB瀏覽器、WAP瀏覽器、郵件系統(tǒng)、電子書(shū)和幫助閱讀器等應(yīng)用程序。為 此,我最近花了不少時(shí)間去閱讀mozilla的代碼和文檔,我將寫(xiě)一系列的BLOG作為筆記,供有需要的朋友參考。本文介紹一下mozilla中的設(shè)計(jì)亮 點(diǎn)。

 

近幾年我看了不少大型開(kāi)源系統(tǒng),它們每個(gè)設(shè)計(jì)得都很經(jīng)典,而mozilla無(wú)疑是其中的佼佼者之一。好的設(shè)計(jì)總是遵循一些眾所周知的設(shè)計(jì)準(zhǔn)則,套句俗語(yǔ)說(shuō),差的設(shè)計(jì)千差萬(wàn)別,好的設(shè)計(jì)都差不多。Mozilla也一樣,它也無(wú)非是遵循了一些好的準(zhǔn)則,只是實(shí)現(xiàn)手段有些差異罷了。這里簡(jiǎn)單的說(shuō)一說(shuō),就算是溫故知新吧。

 

1.       針對(duì)接口編程。

Mozilla 整個(gè)設(shè)計(jì)都是基于組件對(duì)象模型(COM)的,而組件對(duì)象模型(COM)的主要特點(diǎn)就是針對(duì)接口編程。在《設(shè)計(jì)模式》中,作者把針對(duì)接口編程作為設(shè)計(jì)的首要 準(zhǔn)則。針對(duì)接口編程的主要目的就是信息隱藏,隔離變化,把模塊的使用者和實(shí)現(xiàn)者之間的耦合減到最小。而且在XPCOM的幫助下,組件可以動(dòng)態(tài)替換或者增 加,具有更強(qiáng)的靈活性。

 

2.       分離界面和實(shí)現(xiàn)。

在這一方面,mozilla 算是非常前衛(wèi)了:用標(biāo)記語(yǔ)言(XML)開(kāi)發(fā)界面,用編程語(yǔ)言來(lái)實(shí)現(xiàn)(C++)邏輯,而用腳本語(yǔ)言(javascript)把兩者膠合起來(lái),這可以說(shuō)是把三 者的長(zhǎng)處發(fā)揮到了極致。以前我也有過(guò)類似的想法,當(dāng)時(shí)剛進(jìn)入手機(jī)行業(yè),我發(fā)現(xiàn)各種GUI的不統(tǒng)一,導(dǎo)致手機(jī)程序移植非常困難。當(dāng)時(shí)就想,如果應(yīng)用程序的界 面用HTML來(lái)寫(xiě),應(yīng)用程序的邏輯用C/C++寫(xiě),界面在瀏覽器中運(yùn)行,而應(yīng)用程序的邏輯作為WEB服務(wù)器運(yùn)行。再擴(kuò)展一下HTTP協(xié)議,支持異步事件, 完全可以實(shí)現(xiàn)傳統(tǒng)的應(yīng)用程序。后來(lái)發(fā)現(xiàn)mozilla早就實(shí)現(xiàn)了類似的東東,讓我大跌眼鏡。

 

另外mozilla也大量應(yīng)用了觀察者模式,這對(duì)分離界面和實(shí)現(xiàn)很有幫助。比如,網(wǎng)絡(luò)操作通常都要花很長(zhǎng)時(shí)間,在此期間要報(bào)告操作的當(dāng)前狀態(tài)。通過(guò)觀察者模式,可以在長(zhǎng)時(shí)間操作中更新?tīng)顟B(tài),而又避免了操作與用戶界面的耦合。

 

3.       可移植性。

Mozilla 是一個(gè)跨平臺(tái)的軟件,它的基本運(yùn)行平臺(tái)有l(wèi)inux、windows和mac,實(shí)際上它還可以運(yùn)行在其它unix平臺(tái)上,所以可移植性是mozilla是 主要目標(biāo)之一。如果開(kāi)發(fā)過(guò)跨平臺(tái)軟件,你就會(huì)知道開(kāi)發(fā)可移植性軟件是多么困難,特別是大型GUI應(yīng)用程序。Mozilla在可移植性上可謂費(fèi)盡苦心:

l         實(shí)現(xiàn)了一套跨平臺(tái)的組件對(duì)象模型(XPCOM),這使得mozilla可以利用組件對(duì)象模型(COM)的好處,而又不限于windows平臺(tái)。

l         實(shí)現(xiàn)了一套可移植運(yùn)行庫(kù),對(duì)各種操作系統(tǒng)的接口作了抽象,隔離上層模塊對(duì)操作系統(tǒng)的依賴。

l         實(shí)現(xiàn)了自己國(guó)際化機(jī)制,包括編碼轉(zhuǎn)換、編碼檢測(cè)和字符串翻譯等等。

l         對(duì)GUI作了抽象,實(shí)現(xiàn)了widget和gfx兩個(gè)庫(kù),前者負(fù)責(zé)窗口/控件的處理,后者負(fù)責(zé)圖形/圖像的繪制??梢杂貌煌腉UI作為實(shí)現(xiàn)后端。

 

4.       可擴(kuò)展性。

對(duì)于瀏覽器來(lái)說(shuō),可擴(kuò)展性也是非常重要的。由于它涉及的東西太多,專業(yè)的功能應(yīng)該由專業(yè)的廠商去做,而不是全部由瀏覽器來(lái)實(shí)現(xiàn)。比如像flash播放、視頻播放和pdf閱讀等等都應(yīng)該從瀏覽器中分離出來(lái)。Mozilla提供了兩種擴(kuò)展機(jī)制,一種稱為plugin,另外一種稱為extension。這可能有點(diǎn)讓人混淆,我是這樣理解的:

l         plugin用來(lái)增強(qiáng)現(xiàn)有功能,比如wml browser plugin可以把wml轉(zhuǎn)換成html,而media player plugin可以播放音/視頻文件。所有的plugin都要實(shí)現(xiàn)指定的接口。

l         extension用來(lái)擴(kuò)展新功能,這些功能可能與瀏覽器有關(guān),也可能無(wú)關(guān),像help extension就是用來(lái)實(shí)現(xiàn)幫助功能的。Extension不必實(shí)現(xiàn)特定的接口。

 

5.       穩(wěn)定性(內(nèi)存問(wèn)題檢測(cè))。

C/C++開(kāi)發(fā)的應(yīng)用程序,最大的毛病就是容易出現(xiàn)內(nèi)存泄露和越界,即使有多年開(kāi)發(fā)經(jīng)驗(yàn)的老手也可能在此栽了跟頭。有人說(shuō),有很多工具可以幫助檢測(cè)內(nèi)存問(wèn)題啊。沒(méi)錯(cuò),但有兩種情況可能讓這些工具失效,一是GUI系統(tǒng),它們通常使用了共享內(nèi)存,大多數(shù)工具對(duì)此都無(wú)能為力。不信的話,你可以用valgrind檢查一下GTK應(yīng)用程序試試。二是自己管理了內(nèi)存,大型系統(tǒng)中,為了高效的利用內(nèi)存,往往實(shí)現(xiàn)了自己的內(nèi)存管理器,工具對(duì)此一無(wú)所知,自然幫不上忙。

 

Mozilla實(shí)現(xiàn)了自己的內(nèi)存管理器,同時(shí)還實(shí)現(xiàn)多種內(nèi)存問(wèn)題檢查機(jī)制,比如用boehm垃圾回收機(jī)制來(lái)檢查內(nèi)存泄露問(wèn)題。當(dāng)然,對(duì)于C/C++這個(gè)毛病,也是迫不得已,大家都在重復(fù)實(shí)現(xiàn)這些東西,卻沒(méi)有好的重用辦法,這不怪mozilla

 

~~end~~

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多