瀏覽器渲染引擎到底做了什么

好久想寫一篇關(guān)于瀏覽器內(nèi)核的博客了烛恤,一直沒抽出時間岛宦,幸好白夜追兇完結(jié)了,趕緊寫出來莉擒。

1. 瀏覽器

說瀏覽器內(nèi)核之前先聊聊幾個瀏覽器大佬酿炸,目前有可觀市場份額的瀏覽器有5個,分別是Internet Explorer涨冀、Firefox填硕、Safari、Chrome和 Opera瀏覽器鹿鳖。

來看看市場份額占有率:

2017 9

數(shù)據(jù)來自StatCounter2017年九月的數(shù)據(jù)統(tǒng)計扁眯。
其中Firefox、Safari和Chrome是部分開源的翅帜,他們?nèi)齻€的份額占到了將近80%姻檀,看來開源才是互聯(lián)網(wǎng)發(fā)展趨勢。

2. 瀏覽器的主要組件

  1. 用戶界面 - 包括地址欄涝滴、前進(jìn)/后退按鈕绣版、書簽菜單等。除了瀏覽器主窗口顯示的你請求的頁面外歼疮,其他顯示的各個部分都屬于用戶界面杂抽。
  2. 瀏覽器引擎 - 在用戶界面和渲染引擎之間傳送指令。
  3. 渲染引擎 - 負(fù)責(zé)顯示請求的內(nèi)容韩脏。如果請求的內(nèi)容是 HTML缩麸,它就負(fù)責(zé)解析 HTML 和 CSS 內(nèi)容,并將解析后的內(nèi)容顯示在屏幕上赡矢。
  4. 網(wǎng)絡(luò) - 用于網(wǎng)絡(luò)調(diào)用杭朱,比如 HTTP 請求。其接口與平臺無關(guān)吹散,并為所有平臺提供底層實現(xiàn)弧械。
  5. 用戶界面后端 - 用于繪制基本的窗口小部件,比如組合框和窗口空民。其公開了與平臺無關(guān)的通用接口刃唐,而在底層使用操作系統(tǒng)的用戶界面方法。
  6. JavaScript 解釋器袭景。用于解析和執(zhí)行 JavaScript 代碼唁桩,比如chrome的javascript解釋器是V8闭树。
  7. 數(shù)據(jù)存儲耸棒。這是持久層。瀏覽器需要在硬盤上保存各種數(shù)據(jù)报辱,例如 Cookie与殃。新的 HTML 規(guī)范 (HTML5)定義了“網(wǎng)絡(luò)數(shù)據(jù)庫”单山,這是一個完整(但是輕便)的瀏覽器內(nèi)數(shù)據(jù)庫。
主要組件

本文只就瀏覽器渲染引擎部分進(jìn)行討論幅疼。

3. 渲染引擎(The rendering engine)

渲染引擎的職責(zé)就是渲染米奸,即在瀏覽器窗口中顯示所請求的內(nèi)容。這是每一個瀏覽器的核心部分爽篷,所以渲染引擎也稱為瀏覽器內(nèi)核悴晰。
  默認(rèn)情況下,渲染引擎可顯示 HTML 和 XML 文檔及圖片逐工。通過插件(或瀏覽器擴(kuò)展程序)铡溪,還瀏覽器渲染引擎也可以顯示其它類型的內(nèi)容。例如泪喊,使用 PDF 查看器插件就能顯示 PDF 文檔棕硫。
在本章中,我們將集中介紹其主要用途:顯示應(yīng)用了CSS的 HTML 內(nèi)容和圖片袒啼。

3.1 渲染引擎介紹

Firefox 使用的是 Gecko哈扮,這是 Mozilla 公司“自制”的渲染引擎。而 Safari 和 Chrome(28版本以前)瀏覽器使用的都是 Webkit蚓再。

2013年7月10日發(fā)布的Chrome 28 版本中滑肉,Chrome瀏覽器開始正式使用Blink內(nèi)核对途。所以赦邻,Webkit已經(jīng)成為了Chrome瀏覽器的前內(nèi)核。

3.2 渲染流程

渲染引擎一開始會從網(wǎng)絡(luò)層獲取請求文檔的內(nèi)容实檀,通常以8K分塊的方式完成。
獲取了文檔內(nèi)容之后膳犹,渲染引擎開始正式工作恬吕,其基本流程:

渲染引擎的基本流程

渲染引擎解析HTML文檔,并將文檔中的標(biāo)簽轉(zhuǎn)化為dom節(jié)點樹须床,即”內(nèi)容樹”铐料。同時,它也會解析外部CSS文件以及style標(biāo)簽中的樣式數(shù)據(jù)豺旬。這些樣式信息連同HTML中的”可見內(nèi)容”一道钠惩,被用于構(gòu)建另一棵樹——”渲染樹(Render樹)”。
  渲染樹由一些帶有視覺屬性(如顏色族阅、大小等)的矩形組成篓跛,這些矩形將按照正確的順序顯示在頻幕上。
  渲染樹構(gòu)建完畢之后坦刀,將會進(jìn)入”布局”處理階段愧沟,即為每一個節(jié)點分配一個屏幕坐標(biāo)蔬咬。再下一步就是繪制(painting),即遍歷render樹沐寺,并使用UI后端層繪制每個節(jié)點林艘。

值得注意的是,這個過程是逐步完成的混坞,為了更好的用戶體驗狐援,渲染引擎將會盡可能早的將內(nèi)容呈現(xiàn)到屏幕上,并不會等到所有的html都解析完成之后再去構(gòu)建和布局render樹究孕。它是解析完一部分內(nèi)容就顯示一部分內(nèi)容咕村,同時,可能還在通過網(wǎng)絡(luò)下載其余內(nèi)容蚊俺。
主流程示例:

Webkit 主流程
Mozilla 的 Gecko 渲染引擎主流程
  1. Gecko將視覺格式化元素組成的樹稱為”框架樹”(frame)懈涛。每個元素都是一個框架。Webkit使用的術(shù)語是”渲染樹”(render)泳猬,它由”渲染對象”組成批钠。
  2. 對于元素的放置,Webkit 使用的術(shù)語是”布局”(layout)得封,而 Gecko 稱之為”重排”(reflow)埋心。
  3. Webkit稱利用dom節(jié)點及樣式信息去構(gòu)建render樹的過程為attachment,Gecko在html和dom樹之間附加了一層忙上,這層稱為內(nèi)容接收器拷呆,相當(dāng)制造dom元素的工廠。

4. 參考博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疫粥,一起剝皮案震驚了整個濱河市茬斧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梗逮,老刑警劉巖项秉,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異慷彤,居然都是意外死亡娄蔼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門底哗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岁诉,“玉大人,你說我怎么就攤上這事跋选√檠ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長怀浆。 經(jīng)常有香客問我诅蝶,道長,這世上最難降的妖魔是什么同眯? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮唯鸭,結(jié)果婚禮上须蜗,老公的妹妹穿的比我還像新娘。我一直安慰自己目溉,他們只是感情好明肮,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著缭付,像睡著了一般柿估。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陷猫,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天秫舌,我揣著相機(jī)與錄音,去河邊找鬼绣檬。 笑死足陨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的娇未。 我是一名探鬼主播墨缘,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼零抬!你這毒婦竟也來了镊讼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤平夜,失蹤者是張志新(化名)和其女友劉穎狠毯,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體褥芒,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡嚼松,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了锰扶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片献酗。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖坷牛,靈堂內(nèi)的尸體忽然破棺而出罕偎,到底是詐尸還是另有隱情,我是刑警寧澤京闰,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布颜及,位于F島的核電站甩苛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏俏站。R本人自食惡果不足惜讯蒲,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肄扎。 院中可真熱鬧墨林,春花似錦、人聲如沸犯祠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衡载。三九已至搔耕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間痰娱,已是汗流浹背度迂。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留猜揪,地道東北人惭墓。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像而姐,于是被迫代替她去往敵國和親腊凶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容