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