瀏覽器渲染頁面

瀏覽器的工作機制

瀏覽器包含渲染引擎(也稱瀏覽器內(nèi)核)JavaScript 引擎嫂便,它們都是單線程運行。單線程的優(yōu)勢是開發(fā)方便,避免多線程下的死鎖运褪、競爭等問題,劣勢是失去了并發(fā)能力。

  • 互斥性機制
    瀏覽器為了避免兩個引擎同時修改頁面而造成渲染結果不一致的情況秸讹,增加了另外一個機制檀咙,這兩個引擎具有互斥性,也就是說在某個時刻只有一個引擎在運行璃诀,另一個引擎會被阻塞弧可。操作系統(tǒng)在進行線程切換的時候需要保存上一個線程執(zhí)行時的狀態(tài)信息并讀取下一個線程的狀態(tài)信息,俗稱上下文切換劣欢。而這個操作相對而言是比較耗時的棕诵。
    每次 DOM 操作就會引發(fā)線程的上下文切換——從 JavaScript 引擎切換到渲染引擎執(zhí)行對應操作,然后再切換回 JavaScript 引擎繼續(xù)執(zhí)行凿将,這就帶來了性能損耗校套。
  • 重新渲染
    瀏覽器在渲染頁面時會將 HTML 和 CSS 分別解析成 DOM 樹和 CSSOM 樹,然后合并進行排布牧抵,再繪制成我們可見的頁面笛匙。如果在操作 DOM 時涉及到元素、樣式的修改犀变,就會引起渲染引擎重新計算樣式生成 CSSOM 樹膳算,同時還有可能觸發(fā)對元素的重新排布(簡稱“重排”)和重新繪制(簡稱“重繪”)。
    除了這些方法之外弛作,還有一些原則也可能幫助我們提升渲染性能涕蜂,比如:
  • 性能優(yōu)化
    針對DOM 操作耗時,有一些原則也可能幫助我們提升渲染性能如下:
  1. 盡量不要使用復雜的匹配規(guī)則和復雜的樣式映琳,從而減少渲染引擎計算樣式規(guī)則生成 CSSOM 樹的時間机隙;
  2. 盡量減少重排和重繪影響的區(qū)域;
  3. 使用 CSS3 特性來實現(xiàn)動畫效果萨西。

瀏覽器如何渲染頁面

瀏覽器通過 HTTP 協(xié)議接收到的文檔內(nèi)容是字節(jié)數(shù)據(jù)有鹿,下圖是抓包工具截獲的報文截圖,報文內(nèi)容為左側(cè)高亮顯示的區(qū)域(為了查看方便谎脯,該工具將字節(jié)數(shù)據(jù)以十六進制方式顯示)葱跋。當瀏覽器得到字節(jié)數(shù)據(jù)后,通過“編碼嗅探算法”來確定字符編碼源梭,然后根據(jù)字符編碼將字節(jié)流數(shù)據(jù)進行娱俺。


image.png
  • 從HTML到DOM到過程
    如下圖:


    image.png

如果在 HTML 解析過程中遇到 script 標簽,則會發(fā)生一些變化废麻。

如果遇到的是內(nèi)聯(lián)代碼荠卷,也就是在 script 標簽中直接寫代碼,那么解析過程會暫停烛愧,執(zhí)行權限會轉(zhuǎn)給 JavaScript 腳本引擎油宜,待 JavaScript 腳本執(zhí)行完成之后再交由渲染引擎繼續(xù)解析掂碱。有一種情況例外,那就是腳本內(nèi)容中調(diào)用了改變 DOM 結構的 document.write() 函數(shù)慎冤,此時渲染引擎會回到第二步疼燥,將這些代碼加入字符流,重新進行解析蚁堤。

如果遇到的是外鏈腳本醉者,那么渲染引擎會按照我們在第 01 課時中所述的,根據(jù)標簽屬性來執(zhí)行對應的操作违寿。

  • 從 CSS 到 CSSOM
    渲染引擎除了解析 HTML 之外湃交,也需要解析 CSS,CSS 解析的過程與 HTML 解析過程步驟一致藤巢,最終也會生成樹狀結構搞莺。與 DOM 樹不同的是,CSSOM 樹的節(jié)點具有繼承特性掂咒,也就是會先繼承父節(jié)點樣式作為當前樣式才沧,然后再進行補充或覆蓋。

(注:筆記來自 朱德龍 前端高手進階)

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绍刮,一起剝皮案震驚了整個濱河市温圆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孩革,老刑警劉巖岁歉,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異膝蜈,居然都是意外死亡锅移,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門饱搏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來非剃,“玉大人,你說我怎么就攤上這事推沸”刚溃” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵鬓催,是天一觀的道長肺素。 經(jīng)常有香客問我,道長深浮,這世上最難降的妖魔是什么压怠? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮飞苇,結果婚禮上菌瘫,老公的妹妹穿的比我還像新娘。我一直安慰自己布卡,他們只是感情好雨让,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著忿等,像睡著了一般栖忠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贸街,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天庵寞,我揣著相機與錄音,去河邊找鬼薛匪。 笑死捐川,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的逸尖。 我是一名探鬼主播古沥,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼娇跟!你這毒婦竟也來了岩齿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤苞俘,失蹤者是張志新(化名)和其女友劉穎盹沈,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吃谣,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡乞封,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了基协。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片歌亲。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖澜驮,靈堂內(nèi)的尸體忽然破棺而出陷揪,到底是詐尸還是另有隱情,我是刑警寧澤杂穷,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布悍缠,位于F島的核電站,受9級特大地震影響耐量,放射性物質(zhì)發(fā)生泄漏飞蚓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一廊蜒、第九天 我趴在偏房一處隱蔽的房頂上張望趴拧。 院中可真熱鬧溅漾,春花似錦、人聲如沸著榴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脑又。三九已至暮胧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間问麸,已是汗流浹背往衷。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留严卖,地道東北人席舍。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像妄田,于是被迫代替她去往敵國和親俺亮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

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