HTML加載過程

HTML加載流程圖

在地址欄輸入url,返回html后,瀏覽器開始順序加載并渲染DOM

Body標簽

當瀏覽器遇到body標簽才算真正開始加載并渲染DOM掂咒,此時會有以下幾種情況:

DOM元素

瀏覽器遇到dom元素時,正常順序加載迈喉,邊加載邊渲染

內(nèi)聯(lián)CSS

當遇到內(nèi)聯(lián)CSS時绍刮,瀏覽器繼續(xù)加載,但渲染被阻塞挨摸,此時會生成新的CSS Rule Tree孩革,生成后重新渲染界面

外聯(lián)CSS

當遇到外聯(lián)CSS(link標簽),瀏覽器啟一個線程加載css文件得运,DOM繼續(xù)加載但渲染被阻塞

內(nèi)聯(lián)Javascript

當遇到內(nèi)聯(lián)Javascript膝蜈,瀏覽器開始執(zhí)行這段腳本,DOM的加載和渲染同時被阻塞(由于JavaScript有可能會更改DOM Tree和Render Tree熔掺,因此同時被阻塞)

外聯(lián)Javascript

當遇到外聯(lián)Javascript饱搏,瀏覽器開始下載這段腳本,下載成功后執(zhí)行它置逻,這整個過程DOM的加載和渲染同時被阻塞

Example

用一個例子解釋一下

<html>
<body>
  <h2>Hello</h2>
  <script>
    function print(){
        console.log('first script', document.querySelectorAll('h2'));
    }
    print();
    setTimeout(print);
  </script>
  <script src="http://cdn.bootcss.com/bootstrap/4.0.0-alpha.4/js/bootstrap.js"></script>
  <h2>World</h2>
  <script> console.log('second script', document.querySelectorAll('h2')); </script>
</body>
</html>

在js文件下載的過程中推沸,js后面的元素沒有被加載,也沒有呈現(xiàn)在界面上券坞,說明js文件的下載阻塞了DOM的解析并渲染

<html>
<body>
  <h2>Hello</h2>
  <script>
    function print(){
        console.log('first script', document.querySelectorAll('h2'));
    }
    print();
    setTimeout(print);
  </script>
  <link rel="stylesheet" >
  <h2>World</h2>
  <script> console.log('second script', document.querySelectorAll('h2')); </script>
</body>
</html>

在css文件仍在下載的過程中鬓催,已經(jīng)可以打印出兩個<h>,可以看出css文件的加載阻塞了DOM渲染但沒有阻塞DOM加載

defer 與 async

如果我們執(zhí)行以下代碼恨锚,首先加載外部Javascript文件宇驾,然后加載DOM其他內(nèi)容:

<html>
<body>
  <script src="https://cdn.bootcss.com/docsearch.js/2.5.2/docsearch.min.js"></script>
  <h2>Hello World</h2>
</body>
</html>

如我們所料,文件沒有下載并執(zhí)行完畢猴伶,Hello World是不會打印出來的课舍。



如果我們?yōu)橥獠縅avascript添加defer或async屬性,那么它的下載就不會阻塞DOM其他內(nèi)容的加載:

<html>
<body>
  <script async src="https://cdn.bootcss.com/docsearch.js/2.5.2/docsearch.min.js"></script>
  <h2>Hello World</h2>
</body>
</html>


關(guān)于defer與async屬性的區(qū)別他挎,請參考我的另一篇文章:
Javascript高級程序設(shè)計讀書筆記——在HTML中使用Javascript

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末筝尾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子雇盖,更是在濱河造成了極大的恐慌忿等,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崔挖,死亡現(xiàn)場離奇詭異贸街,居然都是意外死亡庵寞,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門薛匪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捐川,“玉大人,你說我怎么就攤上這事逸尖」帕ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵娇跟,是天一觀的道長岩齿。 經(jīng)常有香客問我,道長苞俘,這世上最難降的妖魔是什么盹沈? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮吃谣,結(jié)果婚禮上乞封,老公的妹妹穿的比我還像新娘。我一直安慰自己岗憋,他們只是感情好肃晚,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著仔戈,像睡著了一般关串。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上杂穷,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天悍缠,我揣著相機與錄音,去河邊找鬼耐量。 笑死,一個胖子當著我的面吹牛滤港,可吹牛的內(nèi)容都是我干的廊蜒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼溅漾,長吁一口氣:“原來是場噩夢啊……” “哼山叮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起添履,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤屁倔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后暮胧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锐借,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡问麸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了钞翔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片严卖。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖布轿,靈堂內(nèi)的尸體忽然破棺而出哮笆,到底是詐尸還是另有隱情,我是刑警寧澤汰扭,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布稠肘,位于F島的核電站,受9級特大地震影響萝毛,放射性物質(zhì)發(fā)生泄漏项阴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一珊泳、第九天 我趴在偏房一處隱蔽的房頂上張望鲁冯。 院中可真熱鬧,春花似錦色查、人聲如沸薯演。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跨扮。三九已至,卻和暖如春验毡,著一層夾襖步出監(jiān)牢的瞬間衡创,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工晶通, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留璃氢,地道東北人遮斥。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓如迟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蓬戚。 傳聞我的和親對象是個殘疾皇子喉脖,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359