網(wǎng)頁的渲染機制

網(wǎng)頁渲染必須在很早的階段進行,可以早到頁面布局剛剛定型。因為樣式和腳本都會對網(wǎng)頁渲染產(chǎn)生關鍵性的影響。所以專業(yè)開發(fā)者必須了解一些技巧端辱,從而避免在實踐的過程中遇到性能問題。

Webkit渲染主要流程如下:


webkit.jpg

Mozilla的Gecko渲染引擎主要流程如下:


Mozilla.jpg

由圖可以發(fā)現(xiàn)虽画,兩個引擎過程基本相同舞蔽。主要有三個步驟:

1.解析。瀏覽器會解析HTML/SVG/XHTML码撰,事實上渗柿,webkit有三個C++的類對應這三類文檔。瀏覽器解析這三種文件會產(chǎn)生一個DOM Tree灸拍;解析CSS做祝,產(chǎn)生style rules;解析Javacript鸡岗,主要通過DOM API和CSSOM API來操作DOM Tree和CSS Rule Tree

2.解析完成后混槐,瀏覽器引擎會通過DOM Tree和CSS Rule Tree來構造Rendering Tree。

3.調(diào)用操作系統(tǒng)Native GUI的API繪制轩性。

兩者的語義差別:
webkit把可視化好的可視元素成為Render Tree,用Layout來表示元素的布局
Gecko把可視化好的可視元素成為Frame Tree声登,每個元素就是一個frame,元素的布局成為Reflow

還有一個細小的差別差別在于:Gecko在HTML與DOM樹之間還多一個層content Sink,這是創(chuàng)建DOM對象的工廠悯嗓。

1467471767787_3.jpg

1.解析 HTML 標簽, 構建 DOM 樹

一個是HTML/SVG/XHTML件舵,事實上,Webkit有三個C++的類對應這三類文檔脯厨。解析這三種文件會產(chǎn)生一個DOM Tree铅祸。創(chuàng)建一棵由一組待生成渲染的對象組成的渲染樹(在Webkit中這些對象被稱為渲染器或渲染對象,而在Gecko中稱之為“frame”合武。)渲染樹反映了文檔對象模型的結(jié)構临梗,但是不包含諸如<head>標簽或含有display:none屬性的不可見元素。在渲染樹中稼跳,每一段文本字符串都表現(xiàn)為獨立的渲染器盟庞。每一個渲染對象都包含與之對應的DOM對象,或者文本塊汤善,還加上計算過的樣式什猖。換言之,渲染樹是一個文檔對象模型的直觀展示红淡。

2.解析 CSS 標簽, 構建 CSSOM 樹

解析CSS會產(chǎn)生CSS規(guī)則樹不狮。

3.解析JavaScript,腳本

主要是通過DOM API和CSSOM API來操作DOM Tree和CSS Rule Tree.

4.把 DOM 和 CSSOM 組合成 渲染樹 (render tree)

Rendering Tree 渲染樹并不等同于DOM樹锉屈,因為一些像Header或display:none的東西就沒必要放在渲染樹中了荤傲。
CSS 的 Rule Tree主要是為了完成匹配并把CSS Rule附加上Rendering Tree上的每個Element。也就是DOM結(jié)點颈渊。也就是所謂的Frame。

5.在渲染樹的基礎上進行布局, 計算每個節(jié)點的幾何結(jié)構

6.把每個節(jié)點繪制到屏幕上 (painting)

Repaint重繪

當改變那些不會影響元素在網(wǎng)頁中的位置的元素樣式時终佛,譬如background-color(背景色)俊嗽, border-color(邊框色), visibility(可見性)铃彰,瀏覽器只會用新的樣式將元素重繪一次(這就是重繪绍豁,或者說重新構造樣式)。

Reflow重排

當改變影響到文本內(nèi)容或結(jié)構牙捉,或者元素位置時竹揍,重排或者說重新布局就會發(fā)生。reflow 會從<html>這個root frame開始遞歸往下邪铲,依次計算所有的結(jié)點幾何尺寸和位置芬位,在reflow過程中,可能會增加一些frame带到,比如一個文本字符串必需被包裝起來昧碉。這些改變通常由以下事件觸發(fā):

  • DOM操作(元素添加,刪除,修改被饿,或者元素順序的改變);
  • 容變化四康,包括表單域內(nèi)的文本改變;
  • CSS屬性的計算或改變;
  • 添加或刪除樣式表;
  • 更改“類”的屬性;
  • 瀏覽器窗口的操作(縮放,滾動);
  • 偽類激活(:懸停)狭握。

注:display:none會觸發(fā)reflow闪金,而visibility:hidden只會觸發(fā)repaint,因為沒有發(fā)現(xiàn)位置變化论颅。

瀏覽器如何優(yōu)化渲染

瀏覽器盡可能將重繪/重構 限制在被改變元素的區(qū)域內(nèi)哎垦。比如,對于位置固定或絕對的元素嗅辣,其大小改變只影響元素本身及其子元素撼泛,然而,靜態(tài)定位元素的大小改變會觸發(fā)后續(xù)所有元素的重流澡谭。
另一種優(yōu)化技巧是愿题,在運行幾段JavaScript代碼時,瀏覽器會緩存這些改變蛙奖,在代碼運行完畢后再將這些改變經(jīng)一次通過加以應用潘酗。

參考文獻: 瀏覽器渲染的那些事
有關網(wǎng)頁渲染,每個前端開發(fā)者都該知道的那點事

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雁仲,一起剝皮案震驚了整個濱河市仔夺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌攒砖,老刑警劉巖缸兔,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吹艇,居然都是意外死亡惰蜜,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門受神,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抛猖,“玉大人,你說我怎么就攤上這事鼻听〔浦” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵撑碴,是天一觀的道長撑教。 經(jīng)常有香客問我,道長灰羽,這世上最難降的妖魔是什么驮履? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任鱼辙,我火速辦了婚禮,結(jié)果婚禮上玫镐,老公的妹妹穿的比我還像新娘倒戏。我一直安慰自己,他們只是感情好恐似,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布杜跷。 她就那樣靜靜地躺著,像睡著了一般矫夷。 火紅的嫁衣襯著肌膚如雪葛闷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天双藕,我揣著相機與錄音淑趾,去河邊找鬼。 笑死忧陪,一個胖子當著我的面吹牛扣泊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嘶摊,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼延蟹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了叶堆?” 一聲冷哼從身側(cè)響起阱飘,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎虱颗,沒想到半個月后沥匈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡忘渔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年咐熙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辨萍。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖返弹,靈堂內(nèi)的尸體忽然破棺而出锈玉,到底是詐尸還是另有隱情,我是刑警寧澤义起,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布拉背,位于F島的核電站,受9級特大地震影響默终,放射性物質(zhì)發(fā)生泄漏椅棺。R本人自食惡果不足惜犁罩,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望两疚。 院中可真熱鬧床估,春花似錦、人聲如沸诱渤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勺美。三九已至递胧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赡茸,已是汗流浹背缎脾。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留占卧,地道東北人遗菠。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像屉栓,于是被迫代替她去往敵國和親舷蒲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

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

  • 上圖為主流兩種主流內(nèi)核的渲染主流程雖然 Webkit 和 Gecko 使用的術語略有不同友多,但整體流程是基本相同的牲平。...
    QQQQQCY閱讀 408評論 0 0
  • 主流程 呈現(xiàn)引擎一開始會從網(wǎng)絡層獲取請求文檔的內(nèi)容,內(nèi)容的大小一般限制在 8000 個塊以內(nèi)域滥。然后進行如下所示的基...
    饑人谷_adoreu閱讀 259評論 0 0
  • 瀏覽器的主要功能 瀏覽器的主要功能就是向服務器發(fā)出請求纵柿,在瀏覽器窗口中展示您選擇的網(wǎng)絡資源。這里所說的資源一般是指...
    萊昂納德剛閱讀 200評論 0 0
  • 渲染機制概述 解析 HTML 標簽, 構建 DOM 樹解析 CSS 標簽, 構建 CSSOM 樹把 DOM 和 C...
    柚丶稚橙熟時閱讀 431評論 0 0
  • 在華師大逛了一圈启绰,感到無比的寧靜昂儒,沒有社會上的那種浮躁和爾虞我詐,路上能看到質(zhì)樸的學生委可,前往教學樓或者宿舍渊跋,學生的...
    sintrs閱讀 271評論 0 0