源代碼開放瀏覽器設(shè)計(jì)與實(shí)現(xiàn)
易置換的類集
到目前為止,在考慮使用那一種窗口部件時(shí),爭(zhēng)論最多的是KDE 1.0窗口部件使用的QT窗口部件集合。如果我們可以對(duì)最初的設(shè)計(jì)目標(biāo)做一些妥協(xié),那么QT窗口部件將由于好幾種理由而成為這一方案的一個(gè)合乎邏輯的選擇。其中之一是,尚沒有Microwindows版本的QT采用了一種獨(dú)特的編碼風(fēng)格,它允許用運(yùn)行在另一工具套件上的改進(jìn)版類方便地置換原有的類,這一工具套件具有Microwindows和X版本。
這一事實(shí)降低了QT API的總體大小,因?yàn)槲覀儾辉傩枰械念?。你可得到一個(gè)免費(fèi)的QT版本作為編碼參考。
我們最終選擇的是可同時(shí)在Microwindows和X上運(yùn)行的唯一窗口部件集合FLTK,這一工具套件也采用C++編寫。選擇它的另外一個(gè)好處是這一工具套件在對(duì)QT API和后端FLTK進(jìn)行集成時(shí)相對(duì)較簡(jiǎn)單。
在選擇了核心顯示引擎之后,我們創(chuàng)建了一個(gè)分層軟件體系結(jié)構(gòu),這一結(jié)構(gòu)嚴(yán)格地定義了每一個(gè)瀏覽器模塊以及每一模塊應(yīng)該完成的功能。我們也必須定義一些新模塊,一旦開發(fā)出更小的模塊,或因采用圖形化視窗系統(tǒng)而需要對(duì)某些模塊進(jìn)行更改,就可以置換舊模塊。我們集成的模塊包括:瀏覽器應(yīng)用層、萬(wàn)維網(wǎng)的WWWLib庫(kù)、KHTML View和窗口部件模塊、QT兼容層、IMLIB 圖形庫(kù)和FLTK應(yīng)用框架。
ViewML瀏覽器應(yīng)用層很小,并完全用C++ FLTK應(yīng)用框架編寫,它提供了基本的圖形用戶界面布局。我們盡量將這一層做得很小,以便應(yīng)用工程師能夠很容易地為某個(gè)特定嵌入式應(yīng)用環(huán)境修改ViewML瀏覽器,而無(wú)需深入了解整個(gè)瀏覽器。在一些嵌入式應(yīng)用環(huán)境中,可能根本沒有用戶界面,只顯示一個(gè)全屏幕的瀏覽器頁(yè)面。這一層也可以處理網(wǎng)絡(luò)和本地文件存取需求。
我們選用了萬(wàn)維網(wǎng)協(xié)會(huì)的WWWLib庫(kù)來(lái)執(zhí)行所有的異步網(wǎng)絡(luò)輸入/輸出和HTTP獲得(HTTP get)功能,因?yàn)樗容^容易使用。我們發(fā)現(xiàn)WWWLib庫(kù)基本上要比實(shí)際所需要的大,因此它可能將被改寫。不過(guò),就目前而言,它使我們不必在這一專門領(lǐng)域花費(fèi)太多精力就可迅速獲取初始版瀏覽器的功能。
KHTML View和窗口部件模塊由原始的未經(jīng)修改的KDE 1.0 HTML窗口部件代碼構(gòu)成,這一未經(jīng)修改的源代碼被上層的用戶界面應(yīng)用層調(diào)用,仍認(rèn)為是在和下層的QT應(yīng)用框架通信。KHTML窗口部件處理所有的HTML語(yǔ)法分析、作圖和基本的布局操作,它并不直接處理屏幕滾動(dòng)或顯示框架的操作,而是把這些任務(wù)授權(quán)給KHTML View去做。
QT兼容性層提供未經(jīng)修改的HTML窗口部件和FLTK應(yīng)用框架(而不是QT框架)之間的接口。C++ QT類在這一層被改寫,以保持相同的公共接口,這些類包括圖形窗口部件(編輯控制、按鈕等)、類集及字符串類,用于窗口部件內(nèi)部通信的非標(biāo)準(zhǔn)QT信號(hào)機(jī)制不得不從零開始進(jìn)行編碼。所有的類集和字符串類在標(biāo)準(zhǔn)C++庫(kù)中實(shí)現(xiàn),這些庫(kù)包括:堆棧、列表、字典(哈希表)和常見字符串類,除了QT在其類集合中使用的新型自動(dòng)刪除機(jī)制以外,這些類完全是標(biāo)準(zhǔn)的。
對(duì)圖象而言,Gnome項(xiàng)目中的IMLIB曾用于X視窗系統(tǒng),IMLIB庫(kù)允許實(shí)現(xiàn)QT類型圖象的顯示功能,包括自動(dòng)檢測(cè)圖象類型、自動(dòng)縮放圖象、以及將圖象顯示在屏幕上。盡管IMLIB庫(kù)也有一些不足之處,例如大小,但最主要的缺點(diǎn)是它不適用于Microwindows。因此,對(duì)于該環(huán)境,我們直接將圖形圖象支持功能增加到Microwindows中,這樣就較好地解決了這一問題,同時(shí)使該模塊仍保持較小的尺寸,并且允許增加新的圖像解碼器。
根據(jù)視窗系統(tǒng)的不同,可以采用兩個(gè)不同版本的FLTK應(yīng)用框架。標(biāo)準(zhǔn)版本的FLTK包括對(duì)Win32和X的支持。我們和Microwindows項(xiàng)目開發(fā)人員一起將FLTK移植到Microwindows已有的Nano-X API中,這一技術(shù)支持允許與Microwindows服務(wù)器進(jìn)行客戶-服務(wù)器交互,就如同采用Xlib模型一樣。由于FLTK和Microwindows都能支持X Window系統(tǒng),因此它是一個(gè)很不錯(cuò)的選擇。
ViewML項(xiàng)目已經(jīng)在短時(shí)間內(nèi)開發(fā)出了一種高品質(zhì)的網(wǎng)絡(luò)瀏覽器,它直接針對(duì)嵌入式Linux環(huán)境。通過(guò)包含源代碼開放的核心部件,我們已經(jīng)能夠在不占用多少RAM和ROM資源的情況下使用一個(gè)高品質(zhì)的顯示引擎。
Linux做嵌入式的優(yōu)勢(shì),首先,Linux是開放源代碼的,不存在黑箱技術(shù),遍布全球的眾多Linux愛好者又是Linux開發(fā)者的強(qiáng)大技術(shù)支持;其次,Linux的內(nèi)核小、效率高,內(nèi)核的更新速度很快,linux是可以定制的,其系統(tǒng)內(nèi)核最小只有約134KB。第三,Linux是免費(fèi)的OS,在價(jià)格上極具競(jìng)爭(zhēng)力。 Linux還有著嵌入式操作系統(tǒng)所需要的很多特色,突出的就是Linux適應(yīng)于多種CPU和多種硬件平臺(tái),是一個(gè)跨平臺(tái)的系統(tǒng)。到目前為止,它可以支持二三十種CPU。而且性能穩(wěn)定,裁剪性很好,開發(fā)和使用都很容易。很多CPU包括家電業(yè)芯片,都開始做Linux的平臺(tái)移植工作。移植的速度遠(yuǎn)遠(yuǎn)超過(guò)Java的開發(fā)環(huán)境。也就是說(shuō),如果今天用Linux環(huán)境開發(fā)產(chǎn)品,那么將來(lái)?yè)QCPU就不會(huì)遇到困擾。同時(shí),Linux內(nèi)核的結(jié)構(gòu)在網(wǎng)絡(luò)方面是非常完整的,Linux對(duì)網(wǎng)絡(luò)中最常用的TCP/IP協(xié)議有最完備的支持。提供了包括十兆、百兆、千兆的以太網(wǎng)絡(luò),以及無(wú)線網(wǎng)絡(luò),Toker ring(令牌環(huán)網(wǎng))、光纖甚至衛(wèi)星的支持。所以Linux很適于做信息家電的開發(fā)。
ViewML瀏覽器的運(yùn)行大概需要2M字節(jié)的RAM,代碼文件的大小大約是800k。在Microwindows系統(tǒng)環(huán)境下運(yùn)行時(shí),對(duì)RAM的需求不超過(guò)2.5M字節(jié),這使它可用在大多數(shù)帶圖象顯示功能的32位嵌入式Linux系統(tǒng)上。由于整個(gè)ViewML項(xiàng)目的源代碼是開放的,因此其他開發(fā)者可以迅速理解ViewML并進(jìn)一步將它加以完善。
評(píng)論