正文

Internet Explorer體系結(jié)構(gòu)(11)

IE8 & 9開發(fā)實戰(zhàn):基于下一代IE的應(yīng)用開發(fā) 作者:(美)克羅利


  

托管MSHTML的應(yīng)用程序和對象并不僅限于IE框架和WebBrowser控件。由于所有功能都包裝在活動文檔對象中,所以任何有效的“文檔宿主程序”都可以加載、顯示和控制Trident。

Trident本身可以看作一個容器,其中容納了緊密連接在一起的子系統(tǒng),每個子系統(tǒng)都有自己的角色、功能,而且在大多數(shù)情況下,都有一組公開的公共界面(見圖1-20)。

圖1-20  Trident體系結(jié)構(gòu)圖

Trident使用標記和擴展,并在很多核心子系統(tǒng)中執(zhí)行涉及這些標記與擴展的命令。盡管這個框圖中標出了MSHTML的主要范圍,但仍然有一些由IE及其設(shè)計所獨有的私有組件未在這里給出。

1.5.1  分析器子系統(tǒng)

分析器負責讀取、標記(tokenize)和分析供其他引擎組件使用的標記(markup)。分析器的第一級稱為預分析器。在收到一個文檔時,內(nèi)部類對文本進行解碼。然后使用內(nèi)部標記器(tokenizer)將解碼后的文本轉(zhuǎn)換為標記流。

當預分析器在文本流中讀取信息時,IE通過一個先行下載器傳送該信息。這一功能掃描在后面分析過程中可能用到的資源URL(例如CSS和JavaScript腳本)。由于在等待下載相關(guān)文件時可能會明顯降低渲染速度,所以盡快確認并請求這些資源是非常重要的。當找到候選URL時,將這個URL添加到網(wǎng)絡(luò)請求隊列中。這種預下載機制(有時也稱為“推測下載”)有助于在最大限度上縮短Trident在等待下載相關(guān)項上花費的時間。

在進行解碼和標記之后,主分析器從流中讀取元素,并為整個HTML文檔做準備。將會創(chuàng)建樹節(jié)點和標記,標記流傳送給核心文檔子系統(tǒng)。

1.5.2  文檔模式和兼容性視圖

兼容性視圖是IE布局引擎的一種模式,可以像在低版本IE中一樣渲染和顯示網(wǎng)頁;這些版本稱為“文檔模式”。兼容性視圖可以通過HTTP頭、網(wǎng)頁、用戶界面或者兼容性列表來啟動。

1.5.3  核心文檔子系統(tǒng)

標記通過分析器之后,傳送給“核心文檔子系統(tǒng)”,也稱為“標記服務(wù)”。這一部分Trident獲取經(jīng)過分析的標記后,構(gòu)建標記流,并為使用和轉(zhuǎn)換做一些準備工作,以將其轉(zhuǎn)換為對象模型。通過標記服務(wù)API可以看到這一子系統(tǒng)的公共實現(xiàn),這一實現(xiàn)通過IMarkupServices界面公開。在構(gòu)造了標記流之后,就將其傳送給其他Trident子系統(tǒng)。

注意:

盡管標記最終是由對象模型子系統(tǒng)放置在一個樹狀結(jié)構(gòu)中,但存在一種很普遍的誤解:是IE的分析器創(chuàng)建了一個文檔“樹”。標記服務(wù)創(chuàng)建了一種經(jīng)過優(yōu)化的專用文本流,以便于Trident的其余部分使用。如需更多信息,請查看MSDN中的IMarkupServices文檔和文章。

1.5.4  文本、布局和渲染子系統(tǒng)

文本、布局和渲染子系統(tǒng)是一組內(nèi)容非常廣泛的內(nèi)部界面,負責在屏幕和打印紙張上定位和顯示內(nèi)容。

文本引擎負責存儲和顯示信息,包括將文本塊傳送給相關(guān)子系統(tǒng),例如編輯和布局。

布局引擎是一組算法,負責收集信息、構(gòu)建數(shù)據(jù)結(jié)構(gòu)和將大小和定位信息輸出到呈現(xiàn)引擎。盡管沒有與這個塊相關(guān)聯(lián)的公開界面,但在內(nèi)部是知道它的,有時在一些博客中稱為“頁面、表格和線條服務(wù)”(PTLS)。

渲染引擎負責在屏幕上顯示網(wǎng)頁。它從布局引擎接收內(nèi)容大小和定位信息,從腳本及二進制行為中接收自定義元素或元素效果定義,將這些內(nèi)容的解釋渲染在屏幕上。

1.5.5  對象模型子系統(tǒng)

這個對象模型在較高層次上,控制對文檔元素進行分析之后與其進行的通信。它將分析器發(fā)現(xiàn)的文檔元素綁定到腳本引擎,以支持動態(tài)HTML內(nèi)容。


上一章目錄下一章

Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號