国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > HTML > 正文

了解html頁面的渲染過程以備學習前端的性能優化

2019-10-26 17:26:58
字體:
來源:轉載
供稿:網友
最近在學習前端的性能優化,有必要了解一下頁面的渲染流程,以便對癥下藥,找出性能的瓶頸所在。以下是我看到的一些東西,分享給大家。
參考:Understanding the renderer
頁面的渲染有以下特點:
•單線程事件輪詢
•定義明確、連續、操作有序(HTML5)
•分詞和構建DOM樹
•請求資源并預加載
•構建渲染樹并繪制頁面
具體來說:
當我們從網絡上得到HTML的相應字節時,DOM樹就開始構建了。由瀏覽器更新UI的線程負責。當遇到以下情況時,DOM樹的構建會被阻塞:
•HTML的響應流被阻塞在了網絡中
•有未加載完的腳本
•遇到了script節點,但是此時還有未加載完的樣式文件
渲染樹構建自DOM樹,并且會被樣式文件阻塞。
由于是基于單線程的事件輪詢,即使沒有腳本和樣式的阻塞,當這些腳本或樣式被解析、執行并且應用的時候,也會阻塞頁面的渲染。
一些不會阻塞頁面渲染的情況:
•定義的defer屬性和async屬性的
•沒有匹配的媒體類型的樣式文件
•沒有通過解析器插入script節點或樣式節點
下面,通過一個例子來說明一下(完整的代碼):

復制代碼
代碼如下:
<html>
<body>
  <link rel="stylesheet" href="example.css">
  <div>Hi there!</div>
  <script>
    document.write('<script src="other.js"></scr' + 'ipt>');
  </script>
  <div>Hi again!</div>
  <script src="last.js"></script>
</body>
</html>

代碼很容易看明白,如果放在瀏覽器中打開會立即顯示出想要的頁面。下面,讓我們用慢鏡頭回放的方式來看看它究竟是怎么渲染的。

復制代碼
代碼如下:
<html>
<body>
  <link rel="stylesheet" href="example.css">
<div>Hi there!</div>
<script>...

首先,解析器遇到了example.css,并將它從網絡中下載下來。下載樣式表的過程是耗時的,但是解析器并沒有被阻塞,繼續往下解析。接下來,解析器遇到script標簽,但是由于樣式文件沒有加載下來,阻塞了該腳本的執行。解析器被阻塞住,不能繼續往下解析。

渲染樹也會被樣式文件阻塞,所以這時候沒有瀏覽器不會去渲染頁面,換句話說,如果example.css文件下載不下來,Hi there! 是顯示不出來的。
接下來,繼續。。。

復制代碼
代碼如下:
<html>
<body>
  <link rel="stylesheet" href="example.css">
<div>Hi there!</div>
<script>
  document.write('<script src="other.js"></scr' + 'ipt>');
</script>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 化州市| 屏南县| 阜康市| 辰溪县| 康平县| 新竹县| 云阳县| 广西| 谷城县| 黄冈市| 马公市| 通化市| 怀宁县| 江永县| 宜阳县| 萝北县| 三河市| 花莲市| 静乐县| 红原县| 苏尼特左旗| 临海市| 长武县| 巴林左旗| 叙永县| 普格县| 泸定县| 朝阳区| 无为县| 鹤壁市| 桦甸市| 根河市| 普陀区| 北川| 康马县| 五华县| 肥乡县| 怀化市| 枣阳市| 尼木县| 绿春县|