瀏覽器DOM渲染及阻塞問題

原文鏈接:https://www.cnblogs.com/liuarui/p/11393297.html

瀏覽器DOM渲染及阻塞問題

在準備面試,然后復習到了計網的知識點移盆,緊接著又扯到了url從輸入到瀏覽器渲染的那個問題币喧,這里來順便完善補充一下轨域,本文的重點在渲染

image

上面的圖就是瀏覽器從服務器請求來頁面后渲染的全過程

這里我們分開來看:分為了四大步

  • 解析DOM樹和CSSOM

1.HTML標簽進行Dom樹解析:

     在Dom樹解析的過程中,遇到link會去進行請求資源杀餐,這個過程不會阻塞Dom的解析干发;

     遇到script標簽,則會將解析停下來史翘,去執(zhí)行js代碼枉长,因此script標簽通常建議放在</body>之前,能優(yōu)化用戶體驗琼讽,減少白屏時間必峰,還可以使用js動態(tài)加載生產script標簽(PS:這個jsonp跨域請求有在使用)

     這里需要**注意**img標簽是不會阻塞Dom的解析的,雖然他也有src標簽去請求外部資源

下面是大佬思否上的原話:

解析遇到link钻蹬、script吼蚁、img標簽時,瀏覽器會向服務器發(fā)送請求資源问欠。
script的加載或者執(zhí)行都會阻塞html解析肝匆、其他下載線程以及渲染線程。
link加載完css后會解析為CSSOM(層疊樣式表對象模型,一棵僅含有樣式信息的樹)顺献。css的加載和解析不會阻塞html的解析旗国,但會阻塞渲染。
img的加載不會阻塞html的解析注整,但img加載后并不渲染能曾,它需要等待Render Tree生成完后才和Render Tree一起渲染出來嫁怀。未下載完的圖片需等下載完后才渲染。

2.CSS語法進行CSS樹解析

       CSS解釋器將CSS進行解釋然后解析

** 劃重點=枳恰L潦纭!Dom樹和CSSOM兩者不是解析完再渲染的蚂斤,而是邊解析邊進行渲染的存捺!**

  • DOM樹和CSSOM渲染完成后合并生成Render樹

  • 布局(reflow重排發(fā)生在這個階段)

這個階段是通過遞歸調用進行布局的,引擎計算各元素的尺寸大小曙蒸,進行布局樹繪制

觸發(fā)重排:

  1. 頁面首次渲染
  2. 瀏覽器窗口大小變化
  3. 元素尺寸捌治、位置、內容纽窟、字體大小發(fā)生變化
  4. 添加或刪除可見的元素
  5. 激活偽類時
  • 繪制(repainting重繪發(fā)生在這個階段)

觸發(fā)重繪:改變元素顏色肖油、背景、visibility臂港、outline等屬性

I埂!审孽!劃重點 县袱,重排一定會觸發(fā)重繪,重繪不一定會觸發(fā)重排

阻塞問題總結

阻塞發(fā)生的情況:

  • 遇到script標簽加載js的時候會加載js并且執(zhí)行完畢才開始渲染
  • 遇到alert會阻塞
  • css也會阻塞
  • css是由單獨的下載線程異步下載的佑力。

總結:
1.css加載不會阻塞DOM樹的解析
2.css加載會阻塞DOM樹(render樹)的渲染
3.css加載會阻塞后面js語句的執(zhí)行
為了避免讓用戶看到長時間的白屏時間式散,我們應該盡可能的提高css加載速度,比如可以使用以下幾種方法:

  • 使用CDN(因為CDN會根據你的網絡狀況打颤,替你挑選最近的一個具有緩存內容的節(jié)點為你提供資源暴拄,因此可以減少加載時間)
  • 對css進行壓縮(可以用很多打包工具,比如webpack,gulp等编饺,也可以通過開啟gzip壓縮)
  • 合理的使用緩存(設置cache-control,expires,以及E-tag都是不錯的乖篷,不過要注意一個問題,就是文件更新后反肋,你要避免緩存而帶來的影響那伐。其中一個解決防范是在文件名字后面加一個版本號)
  • 減少http請求數,將多個css文件合并石蔗,或者是干脆直接寫成內聯樣式(內聯樣式的一個缺點就是不能緩存)
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末罕邀,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子养距,更是在濱河造成了極大的恐慌诉探,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棍厌,死亡現場離奇詭異肾胯,居然都是意外死亡竖席,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門敬肚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毕荐,“玉大人,你說我怎么就攤上這事艳馒≡餮牵” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵弄慰,是天一觀的道長第美。 經常有香客問我,道長陆爽,這世上最難降的妖魔是什么什往? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮慌闭,結果婚禮上别威,老公的妹妹穿的比我還像新娘。我一直安慰自己贡必,他們只是感情好兔港,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布庸毫。 她就那樣靜靜地躺著仔拟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪飒赃。 梳的紋絲不亂的頭發(fā)上利花,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音载佳,去河邊找鬼炒事。 笑死,一個胖子當著我的面吹牛蔫慧,可吹牛的內容都是我干的挠乳。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼姑躲,長吁一口氣:“原來是場噩夢啊……” “哼睡扬!你這毒婦竟也來了?” 一聲冷哼從身側響起黍析,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤卖怜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后阐枣,有當地人在樹林里發(fā)現了一具尸體马靠,經...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡奄抽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了甩鳄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逞度。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖妙啃,靈堂內的尸體忽然破棺而出第晰,到底是詐尸還是另有隱情,我是刑警寧澤彬祖,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布茁瘦,位于F島的核電站,受9級特大地震影響储笑,放射性物質發(fā)生泄漏甜熔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一突倍、第九天 我趴在偏房一處隱蔽的房頂上張望腔稀。 院中可真熱鬧,春花似錦羽历、人聲如沸焊虏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诵闭。三九已至,卻和暖如春澎嚣,著一層夾襖步出監(jiān)牢的瞬間疏尿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工易桃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留褥琐,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓晤郑,卻偏偏與公主長得像敌呈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子造寝,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容

  • 本文中瀏覽器特指Chrome瀏覽器 開始之前說說幾個概念磕洪,以及在準備寫這篇文章之前對瀏覽器的渲染機制的了解: DO...
    若邪Y閱讀 3,509評論 1 10
  • CSS和JS在網頁中正確的放置順序 (1)css樣式一般是放在head中的,避免加載不了出現白屏 閃爍等問題匹舞。(2...
    怎么昵稱閱讀 708評論 0 0
  • 瀏覽器如何渲染網頁 要了解瀏覽器渲染頁面的過程褐鸥,首先得知道一個名詞——關鍵渲染路徑。關鍵渲染路徑是指瀏覽器從最初接...
    oWSQo閱讀 32,888評論 5 74
  • 原文鏈接 http://blog.poetries.top/2018/12/22/browser-render 關...
    程序員poetry閱讀 8,281評論 1 10
  • 最近的項目重構了,框架選取的是vue 回顧之前的項目中使用的jquery赐稽,里面涉及的dom操作真的不能太多叫榕。 項目...
    指尖的宇宙閱讀 4,626評論 1 11