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