Mozilla研究—從輸入URL到顯示內容的基本過程

Mozilla研究—從輸入URL到顯示內容的基本過程 html

按個人想象,從輸入URL到顯示內容的過程很是簡單:鏈接到服務器—下載文件—解析內容—排版佈局。而在Mozilla中,實際狀況雖然大致差很少,因爲中間繞了很多圈子,整個過程顯得比較複雜了。這裏簡單介紹一下: 服務器

1. 修正URL。用戶輸入的URL可能不合規範,在URLnsDocShell::LoadURI中,mozilla會調用URIFixup對其進行修正。它 不但能夠進行諸如加上scheme之類的簡單修正,還能夠到指定的URL上去進行關鍵字查詢,以獲取真正的URL。 架構

2. 建立URI對象。調用nsIIOService接口的GetProtocolHandler函數,經過scheme查詢到URI對應的nsIProtocolHandler,而後調用NS_NewURI建立URI對象。 函數

3. 檢查Cache文件。除了像REFRESH之類的操做不容許取cache的狀況外,其它狀況都先調用nsIDocShellHistory的函數,看看可否從歷史記錄中獲取cache的文件。 佈局

4. 建立Channel。在nsDocShell::DoURILoad調用NS_NewChannel建立Channel。 ui

5. 設置Cookie等信息,而後調用AsyncOpen打開Channel。 spa

6. 轉發數據到nsParser。當有數據可用時,會觸發nsInputStreamReadyEvent事件,通過nsInputStreamPump等對象的轉發,數據最終被送到nsParser。 htm

7. 解析數據。nsParser解析數據生成各個元素(Element),解析器的代碼在parser/htmlparser/src目錄下,它支持增量解析,因此能夠在文件傳輸過程當中,邊傳輸邊解析,而沒必要等到傳輸完成以後才解析。 對象

8. CNavDTD作語法檢查,並作適當的修正。CNavDTD實現了nsIDTD接口。整個解析器的架構是Builder模式的變種,它在 Director(即nsParser)和Builder(HTMLContentSink)之間,加了這樣一個nsIDTD,以便對錯誤的語法進行修 正。 接口

9. HTMLContentSink構建nsDocument。

10. nsDocument經PresShell調用nsCSSFrameConstructor去建立各類layout元素。

Layout部分的處理很是複雜,目前尚未弄清楚,之後再介紹吧。

轉, 出處不明。

相關文章
相關標籤/搜索