瀏覽器結構分析

2021-06-16 09:25:42 字數 1970 閱讀 5119

from:

歡迎來到這裡,你將開始一次冒險之旅,而我將作為你的導遊,和你一起進行一次探險的活動,很快,你將會發現世界上還有很多有趣的東西, 比如今天活動 - 一次瀏覽器的結構探索之旅。

今天為什麼要去探索瀏覽器的實現結構呢?首先很少到看有中文相關的比較深入的介紹瀏覽器的實現的文章。其次是我們每天在用的瀏覽器,卻不知道它背後為我們做了多少事情,它到底複雜到什麼程度呢?好啦,開始出發。^_^

一、瀏覽器體系結構

系統的模組:

1.使用者向shell發出頁面請求後,頁面的url或本地檔名被傳送到shell;

2.shell呼叫io元件,把url傳達到io元件;

3.io元件使用http協議或再呼叫本地io獲取html/xhtml源資料,返回shell;

4.shell把io返回的html/xhtml source提交html/xhtml分析器;

5.html/xhtml分析器分析html/xhtml**,構建一棵dom樹,樹根為htmldocument;

6.遍歷dom樹,發現是視覺化元素的時(form等為非視覺化元素,div,table,button等為視覺化元素),請求布局管理器為這乙個視覺化元素分配一席之地,以讓它安身。視覺化元素只能建議布局管理器,它想要什麼樣的位置,大小,最終分配的實際位置,大小等由布局管理器決定,並不是由元素本身決定,它只能對布局管理器提出建議。比如在乙個被設定寬度為100的table中,某的單元格想要分配寬度為200的單元格,布局管理器就不會一定給它分配這麼大,因為該單元格超出了**的寬度。

7.當布局管理器對視覺化元素指派好位置,大小後,它就就知道了它的安身之處,也記住了它的大小,它必須要嚴格遵守布局管理器給它分配的位置,大小,不能擅自更改。既然知道了自己的位置,大小,剩下的就是控制項根據自己的屬性進行表現自己了,背景,外形等。

備註:總之布局管理器對顯示的控制項的位置,大小有絕對的控制權,不管是html元素指定的大小,位置屬性,還是script中對控制項位置、大小的更改,都要經過布局管理器進行計算,最終以布局管理器分配的實際大小,位置為準。

二、處理流程:

為了給每個視覺展現層的庫取乙個比較帥點的,並且又比較容易理解的名字,還真不容易,讓我想了很久,突然想起《深入淺出html>>說到的視覺表達,引用一詞render.覺得不錯,適合給gui集合作為庫名稱。

以下是dom解析用到的相關類的類圖:

以下是視覺表達層的類圖

結語這裡僅僅是對瀏覽器的結構進行了簡要的分析,簡述了瀏覽在我心裡的初步的實現方法,因為我還沒有真正去詳細的解讀其它瀏覽器的實現,所以還是比較片面的。為什麼不去解讀包括firefox這樣著名的瀏覽器,而在這裡設想呢?原因有兩個,一,當我看到firefox 3.0版本的源**包,壓縮時是35mb,解壓後是280多mb的時候,我就沒有很大耐心和時間看下去了;二是我希望給自己留有設想的空間,不願意我的思維就過早的被定格在別人的思維下,我認為事物的實現是有很多種方式,而在今天這裡探索比結果更重要,因為我們要做的是一次探索之旅。

乙個瀏覽器的全部實現還有很多的東西,比如布局管理器、html式樣,script互動等的實現,就有不少東西要做了,這些就留給更深層次的探索吧,今天已經看到了瀏覽器架構的影子,要看到它完全的真面目,我覺得已經很近了。

瀏覽器書籤(bookmarks)結構格式分析

瀏覽器之間能自由的匯入和匯出書籤,是因為統一了書籤的結構,了解書籤結構格式,不僅可以方便我們對匯出的書籤進行編輯,合併,替換等等,還可以自己手工建立適合各種瀏覽器的書籤。這裡我們匯出google 瀏覽器的書籤作為參考分析 doctype netscape bookmark file 1 注釋,無用 ...

瀏覽器 瀏覽器高效搜尋

一 常見場景 以場景的形式來說明 1 場景1 網路上查詢一本書的 指定文件型別 如pdf 如 搜尋關鍵字 c primer plus 的 pdf 版本 輸入 格式 關鍵字 空格 filetype pdf 例項 c primer plus中文版 filetype pdf關鍵字 filetype 2 場...

常見瀏覽器 瀏覽器核心

常見瀏覽器介紹 瀏覽器是網頁執行的平台,常用的瀏覽器有ie 火狐 firefox 谷歌 chrome safari和opera等。我們平時稱為五大瀏覽器。瀏覽器核心 理解 瀏覽器核心又可以分成兩部分 渲染引擎 layout engineer 或者 rendering engine 和 js 引擎。渲...