瀏覽器渲染引擎

一.加載

瀏覽器的五個常駐線程:

  1. 瀏覽器 GUI 渲染線程

  2. javascript 引擎線程

  3. 瀏覽器定時器觸發(fā)線程( setTimeout,setInterval )

  4. 瀏覽器事件觸發(fā)線程

  5. 瀏覽器 http 異步請求

當(dāng)js引擎線程(第二個)進(jìn)行時阁吝,會掛起其他一切線程,這個時候3哈街、4揣苏、5這三類線程也會產(chǎn)生不同的異步事件悯嗓,由于 javascript引擎線程為單線程,所以代碼都是先壓到隊列舒岸,采用先進(jìn)先出的方式運行绅作,事件處理函數(shù),timer函數(shù)也會壓在隊列中蛾派,不斷的從隊頭取出事件,這就叫:javascript-event-loop。簡單點說應(yīng)該是當(dāng)在進(jìn)行第二線程的時候洪乍,1眯杏,3,4壳澳,5都會掛起岂贩,比如這時候觸發(fā)click事件,即使先前JS已經(jīng)加載完成巷波,click事件會壓在隊列里萎津,這里也要先完成第二線程才會執(zhí)行click事件。

加載順序:http://www.cnblogs.com/web-easy/p/5067680.html

二抹镊、渲染

渲染引擎的職責(zé)锉屈,就是負(fù)責(zé)把從服務(wù)器返回HTML,XML或者images等資源渲染并展現(xiàn)給用戶垮耳。

常用的渲染引擎有:webkit ( chrome, safari, opera ) 和 gecko ( firefox )颈渊。

基本的渲染過程:

1.渲染引擎首先會解析 HTML 文檔,轉(zhuǎn)化為 DOM 樹终佛。

2.解析 CSS 的樣式俊嗽,渲染出另外一棵用于渲染 DOM 樹的 render-tree ,render-tree 中包含有 css 中的顏色铃彰,屬性等绍豁。

3.對 render-tree 中的每個節(jié)點進(jìn)行布局,確定其在屏幕上的位置牙捉。

4.遍歷渲染樹妹田,將每一個節(jié)點繪制出來。

webkit 的渲染流程:

webkit

gecko 的渲染流程:

gecko

通過上圖可以看出鹃共,webkit 與 gecko 最大的區(qū)別就是渲染樣式的時間鬼佣。

webkit 中,解析 HTML 與 CSS 樣式是同時發(fā)生的霜浴。

而 gecko 中 HTML 解析出 content-sink ( DOM樹搭建前的 pre-model ) 之后晶衷,按照 pre-model 來解析樣式。

關(guān)于 content-sink

樣式計算優(yōu)先級:

  1. 瀏覽器默認(rèn)樣式

  2. 用戶個性化瀏覽器設(shè)置

  3. HTML 開發(fā)者定義的一般樣式

  4. 開發(fā)者定義的 !important 樣式

  5. 用戶個性瀏覽器設(shè)置的 !important 樣式

更詳細(xì)的:

通用選擇器(*)>元素(類型)選擇器>類選擇器>屬性選擇器>偽類>ID 選擇器>內(nèi)聯(lián)樣式

count 1 if the declaration is from is a 'style' attribute rather than a rule with a selector, 0 otherwise (= a)

count the number of ID attributes in the selector (= b)

count the number of other attributes and pseudo-classes in the selector (= c)

count the number of element names and pseudo-elements in the selector (= d)

舉例說明


*            {}  /* a=0 b=0 c=0 d=0 -> specificity = 0,0,0,0 */

li            {}  /* a=0 b=0 c=0 d=1 -> specificity = 0,0,0,1 */

li:first-line {}  /* a=0 b=0 c=0 d=2 -> specificity = 0,0,0,2 */

ul li        {}  /* a=0 b=0 c=0 d=2 -> specificity = 0,0,0,2 */

ul ol+li      {}  /* a=0 b=0 c=0 d=3 -> specificity = 0,0,0,3 */

h1 + *[rel=up]{}  /* a=0 b=0 c=1 d=1 -> specificity = 0,0,1,1 */

ul ol li.red  {}  /* a=0 b=0 c=1 d=3 -> specificity = 0,0,1,3 */

li.red.level  {}  /* a=0 b=0 c=2 d=1 -> specificity = 0,0,2,1 */

#x34y        {}  /* a=0 b=1 c=0 d=0 -> specificity = 0,1,0,0 */

style=""          /* a=1 b=0 c=0 d=0 -> specificity = 1,0,0,0 */

上面確定了renderer的樣式規(guī)則后阴孟,然后就是重要的顯示因素布局了晌纫。當(dāng)renderer構(gòu)造出來并添加到render樹上之后,它并沒有位置跟大小信息永丝,為它確定這些信息的過程锹漱,我們就稱之為布局。HTML采用了一種流式布局的布局模型慕嚷,從上到下哥牍,從左到右順序布局毕泌,布局的起點是從render樹的根節(jié)點開始的,對應(yīng)dom樹的document節(jié)點嗅辣,其初始位置為0,0,詳細(xì)的布局過程為: 每個renderer的寬度由父節(jié)點的renderer確定撼泛。 父節(jié)點遍歷子節(jié)點,確定子節(jié)點的位置(x,y)澡谭,調(diào)用子節(jié)點的layout方法確定其高度愿题。 父節(jié)點根據(jù)子節(jié)點的height,margin,padding確定自身的自身的高度。

為了避免因為局部小范圍的DOM修改或者樣式改變引起整個頁面整體的布局重新構(gòu)造蛙奖,瀏覽器采用了一種dirty bit system的技術(shù)潘酗,使其盡可能的只改變元素本身或者包含的子元素的布局。當(dāng)然有些情況無可避免的要重新構(gòu)造整個頁面的布局雁仲,如適合于整體的樣式的改變影響了所有renderer仔夺,如body{font-size:111px} 字體大小發(fā)生了改變,還有一種情況就是瀏覽器窗口進(jìn)行了調(diào)整伯顶,resize囚灼。

參考:

MDN

http://www.cnblogs.com/xugang/archive/2010/09/24/1833760.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市祭衩,隨后出現(xiàn)的幾起案子灶体,更是在濱河造成了極大的恐慌,老刑警劉巖掐暮,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝎抽,死亡現(xiàn)場離奇詭異,居然都是意外死亡路克,警方通過查閱死者的電腦和手機(jī)樟结,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來精算,“玉大人瓢宦,你說我怎么就攤上這事』矣穑” “怎么了驮履?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長廉嚼。 經(jīng)常有香客問我玫镐,道長,這世上最難降的妖魔是什么怠噪? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任恐似,我火速辦了婚禮,結(jié)果婚禮上傍念,老公的妹妹穿的比我還像新娘矫夷。我一直安慰自己葛闷,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布口四。 她就那樣靜靜地躺著孵运,像睡著了一般秦陋。 火紅的嫁衣襯著肌膚如雪蔓彩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天驳概,我揣著相機(jī)與錄音赤嚼,去河邊找鬼。 笑死顺又,一個胖子當(dāng)著我的面吹牛更卒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播稚照,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蹂空,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了果录?” 一聲冷哼從身側(cè)響起上枕,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弱恒,沒想到半個月后辨萍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡返弹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年锈玉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片义起。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡拉背,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出默终,到底是詐尸還是另有隱情椅棺,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布穷蛹,位于F島的核電站土陪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏肴熏。R本人自食惡果不足惜鬼雀,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛙吏。 院中可真熱鬧源哩,春花似錦鞋吉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坛掠,卻和暖如春赊锚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背屉栓。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工舷蒲, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人友多。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓牲平,卻偏偏與公主長得像,于是被迫代替她去往敵國和親域滥。 傳聞我的和親對象是個殘疾皇子纵柿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355

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

  • 前言 瀏覽器基礎(chǔ)是前端知識網(wǎng)中的一個小分支,也是前端開發(fā)人員必須掌握的基礎(chǔ)知識點启绰。他貫穿著前端的整個網(wǎng)絡(luò)體系昂儒,項目...
    木羽zwwill閱讀 1,231評論 0 4
  • 好久想寫一篇關(guān)于瀏覽器內(nèi)核的博客了,一直沒抽出時間酬土,幸好白夜追兇完結(jié)了荆忍,趕緊寫出來。 1. 瀏覽器 說瀏覽器內(nèi)核之...
    流光號船長閱讀 7,710評論 1 5
  • 1. 介紹 瀏覽器可能是最廣泛使用的軟件撤缴。本書將介紹瀏覽器的工作原理刹枉。我們將看到,當(dāng)你在地址欄中輸入google....
    康斌閱讀 2,021評論 7 18
  • 轉(zhuǎn)載說明 一屈呕、介紹 瀏覽器可以被認(rèn)為是使用最廣泛的軟件微宝,本文將介紹瀏覽器的工作原理,我們將看到虎眨,從你在地址欄輸入g...
    17碎那年閱讀 2,450評論 0 22
  • 簡介瀏覽器可以被認(rèn)為是使用最廣泛的軟件嗽桩,本文將介紹瀏覽器的工 作原理岳守,我們將看到,從你在地址欄輸入google.c...
    聽風(fēng)閣閱讀 3,291評論 0 7