瀏覽器解析渲染的過程

瀏覽器加載解析過程

在面試的時候,有的面試官會問到js加載是不是會阻塞DOM樹的解析和渲染,css會不會,或者問到相關問題,就想總結一下,首先有幾個問題,自己在查詢資料的時候,答案衆說紛紜,通過自己學習,總結如下,也歡迎糾正
1.css會不會阻塞DOM樹的解析和渲染?
css是不會阻塞DOM樹的解析;因爲當瀏覽器解析到link的href去加載外部css文件的時候,瀏覽器還是會繼續加載dom結構,爲了效率,它會把該完成的都解析完,生成相應的dom樹,但是會阻塞dom的渲染,它要等外部的css文件加載解析完,纔會解析style標籤裏的樣式,這時候纔是根據樣式的順序也好,權重也好去渲染dom。

//小demo:
//demo.css文件:
.demo {
    background-color: yellow !important;   //1
}
//.html文件
<link ref="stylesheet" href="./demo.css">
//style:
    .demo {
        width: 200px;
        height: 200px;
        background-color: red !important;   //2
    }
//body:
    <div class="demo" style="background-color: blue">你好</div>  //3
    顯示的你好是什麼顏色? 

2.js會不會阻塞DOM樹的解析和渲染?
js的加載會阻塞DOM樹的解析和渲染,還有後面一些資源的下載,js的加載和執行有以下特點:
1>載入js後瀏覽器會立即執行
2>執行時會阻塞後面內容的構建,渲染及以下資源的下載,因爲瀏覽器需要一個穩定的DOM樹結構,而JS中很有可能有代碼直接改變了DOM樹結構,比如使用 document.write 或 appendChild,甚至是直接使用的location.href進行跳轉,瀏覽器爲了防止出現JS修 改DOM樹,需要重新構建DOM樹的情況,所以 就會阻塞其他的下載和呈現。

//運行個demo,自己可以測試一下:
//把腳本放在頭部和放在底部,在js裏面去獲取dom元素,看看能不能獲取到,或者寫個死循環,讓腳本一直運行,看dom能顯示出來不 
<script>
        while(true){
            console.log(1);
        }
</script>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章