精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

通過Performance面板驗證瀏覽器資源加載與渲染機制

系統 瀏覽器
文檔對象模型(Document Object Model,簡稱 DOM),是 W3C 組織推薦的處理可擴展置標語言的標準編程接口。DOM 把整個頁面映射為一個多層的節點結構,HTML 或 XML 頁面中的每個組成部分都是某種類型的節點,這些節點又包含著不同類型的數據。

前言

一個網頁的核心由HTML、CSS和JavaScript組成,三者協同工作以呈現內容并實現交互。但瀏覽器如何解析這些資源?加載順序如何影響用戶體驗?讀完本本文你將徹底弄懂以下核心知識

  1. 為什么需要生成DOM樹?
  2. CSS是否會阻塞HTML解析?是否阻塞頁面渲染?
  3. JavaScript是否會阻塞HTML解析?
  4. JavaScript的異步加載機制如何影響解析過程?
  5. 如何通過performance面板驗證以上觀點

認識DOM

文檔對象模型(Document Object Model,簡稱 DOM),是 W3C 組織推薦的處理可擴展置標語言的標準編程接口。DOM 把整個頁面映射為一個多層的節點結構,HTML 或 XML 頁面中的每個組成部分都是某種類型的節點,這些節點又包含著不同類型的數據。

W3C DOM 由以下三部分組成:

  • 核心 DOM - 針對任何結構化文檔的標準模型
  • XML DOM - 針對 XML 文檔的標準模型
  • HTML DOM - 針對 HTML 文檔的標準模型

如果覺得這樣介紹不夠直觀,可以看下這張圖:

圖片圖片

各個dom節點組合起來就形成了一個樹狀結構,所以我們通常稱之為DOM樹

為什么需要DOM樹?

  • 結構化數據:將HTML標簽(如<div><p>)和文本內容轉化為節點對象,以樹形結構表示標簽的父子嵌套關系。
  • JavaScript動態操作的基礎:這一過程解決了原生HTML文本的局限性,允許JavaScript通過屬性與方法直接操作節點。
  • 渲染過程的核心輸入:DOM樹提供內容結構,CSSOM樹提供樣式規則,兩者結合生成渲染樹(Render Tree),決定頁面元素的可見性與布局。
  • 安全性:DOM解析階段會過濾惡意內容。

DOM 是瀏覽器對頁面的內部表示,也是 Web 開發人員可以通過 JavaScript 交互的數據結構和 API。

解析HTML

網絡線程獲取HTML文件后,瀏覽器才會開始進行解析處理生成DOM樹。

圖片圖片

在這個過程中每個HTML標簽都會被瀏覽器解析成文檔對象,并且所有的文檔對象最終都會被掛在document

比如:

圖片圖片

并且為了提高解析效率,在解析之前,瀏覽器會啟動一個預解析的線程,提前去下載文檔中的外部CSS文件和外部JS文件。

解析CSS

在構建DOM的過程中,如果遇到link標簽,當把它插入到DOM樹上后,此時如果外部的CSS文件還沒有下載完,主線程也不會停下來等待,因為下載和解析CSS的工作是在預解析線程中進行的,所以CSS并不會阻塞html的解析。

解析html的目的是為了生成DOM樹,而解析CSS的目的同樣是為了生成CSSOM樹,兩者都是為了轉換成瀏覽器能夠理解的結構,也可以方便javascript的訪問。

我們可以通過document.styleSheets來查看它的結構:

圖片圖片

CSSOM結構主要是為了給JavaScript提供操作樣式表的能力,以及提供基礎的樣式信息

大體上來說,CSSOM是一個建立在web頁面上的 CSS 樣式的映射,它和DOM類似,但是只針對CSS而不是HTML,瀏覽器會將DOM和CSSOM結合生成渲染樹。

CSS是否會阻塞渲染?

雖然CSS并不會阻塞html的解析,但由于渲染樹的生成需要CSSOM的參與,所以CSS是會阻塞頁面渲染的

真的原因是,如果瀏覽器在CSS檢查之前展示了頁面,那么每個頁面都是沒有樣式的,等一會之后又突然有了樣式,整個頁面的體驗就會很差。由于CSSOM被用作創建渲染樹,那么如果不能高效的利用CSS會導致白屏時間的增加

解析javascript

在構建DOM的過程中,如果遇到script,在默認情況下主線程會停止對html的解析,轉而等待 JS 文件下載好,并將全局代碼解析執行完成后,才會繼續解析html。這是因為 JS 代碼的執行過程可能會修改當前的 DOM 樹,所以 DOM 樹的生成必須暫停。這就是 JS 會阻塞 HTML 解析的根本原因。

在html5中對script新增了兩個屬性可用于異步加載腳本,設置不同的屬性對解析HTML文檔也有很大的影響。

異步加載

圖片

這里我們要討論的不僅僅是asyncdefer,還有type=module

默認情況
  • 在默認情況下,script 標簽在請求和執行的時候都會阻塞文檔解析
defer

延遲腳本執行:帶有defer屬性的腳本,加載不會阻塞頁面的解析和渲染過程,瀏覽器可以繼續解析頁面的其余部分,當整個文檔完成解析后,在觸發DOMContentLoaded事件之前執行這些腳本。

順序執行:帶有defer屬性的腳本,盡管是異步加載的,但是它們之間會保持順序執行。

async

非阻塞加載:帶有async屬性的腳本加載是異步的,不會阻塞HTML文檔的解析,瀏覽器可以繼續向下解析和渲染。不過,當腳本加載完成后,會立即執行腳本內的代碼,此時如果HTML還沒有解析完成,則會暫停對html的解析,從而阻塞頁面渲染。但如果當腳本加載完準備執行之前,html已經解析完成,此時也不會阻塞頁面渲染。

執行不可控:帶有async屬性的腳本,執行是不可控的,因為無法確定腳本的下載速度與腳本內容的執行速度,如果存在多個script async時,他們之間的執行的順序也是不可控的,完全取決于各自的下載速度,誰先下載完成就先執行誰。

module

非阻塞加載:帶有type="module"的腳本加載是異步的,這類標簽視為ES6模塊來處理,而ES6模塊是設計為異步加載的,當瀏覽器遇到此類標簽時,會開始異步下載改模塊及其依賴項,不會暫停頁面的解析和渲染工作,當HTML文檔被解析完成后,會在觸發DOMContentLoaded事件之前執行這些腳本。所以它的表現有點類似defer

模塊化支持:帶有type="module"的腳本會自動分割成不同的模塊,并且相互之間作用域是隔離的,瀏覽器會自動加載這些模塊,無需手動管理依賴關系。

支持靜態導入和動態導入:可以使用import語句靜態地導入其它模塊,這些導入的模塊加載時自動解析和執行。還可以使用import()函數動態地導入模塊,根據需要在運行時加載模塊,進一步控制模塊的加載和執行時機。

module && async

表現類似async

通過performance驗證

實驗代碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./a.css" />
    <script>
        console.log('【readystatechange】', document.readyState)
        document.addEventListener('readystatechange', (e) => {
            console.log('【readystatechange】', document.readyState)
        })
        window.addEventListener('load', (e) => {
            console.log('【load】')
        })

        document.addEventListener('DOMContentLoaded', (e) => {
            console.log('【DOMContentLoaded】')
        })        
    </script>
    <script defer src="./a.js"></script>
    <script async src="./b.js"></script>
    <script src="./c.js"></script>
</head>
<body>
    <div class="container"></div>
</body>
</html>

網絡

頁面中分別引入了一個css資源,三個JS資源以及一個內聯腳本,我們可以看下各資源的加載情況

圖片圖片

首先肯定是先加載html文件,而html中的cssjs資源會以他們在文檔中的順序依次進行請求加載,由于內聯腳本無需再發起請求,所以在網絡模塊中也不會有它的存在。

注意看紅線位置,這是html開始解析的時間點,從network模塊上看,內部的css與js資源竟然在這之前就發起了請求,這也就驗證了為了加速,瀏覽器的預加載掃描器會同時運行,如果在 html 中存在  <link><script>img 等標簽,預加載掃描器會把這些請求傳遞給瀏覽器進程中的網絡線程進行相關資源的下載。

從圖中我們可以看到,a.cssc.js文件右上角都出現了紅色標注,這是代表這兩個文件都會阻塞頁面的渲染

圖片圖片

為了更清晰的了解各模塊的加載解析與渲染之間的關系,我們可以查看下方的主線程模塊

主線程

圖片圖片

可以看到html的解析、css的解析、腳本的執行、頁面渲染等都發生在主線程

parse html

在瀏覽器渲染引擎內部,有一個叫HTML 解析器(HTMLParser)的模塊,它負責將HTML字節流轉換為DOM結構。HTML Standard規范定義了瀏覽器渲染HTML為DOM的方法。

??需要注意的是HTML解析器并不是等整個文檔加載完成之后再解析的,而是網絡進程加載了多少數據,HTML解析器就解析多少數據。

圖片圖片

注意看,第一次解析html的范圍是0-24,解析過程遇到了css資源,等css資源下載完成后會開始解析css(這個過程不會阻塞html的解析)

parse stylesheet

圖片圖片

Evaluate script

再往后就遇到了內聯腳本,這個時候會停下來解析執行JS(這才是導致html解析暫停的根本原因)

圖片圖片

等腳本執行完后會繼續解析html

圖片圖片

注意range,跟上一次parse html剛好接上了

接著往后會依次遇到a、b、c三個腳本,由于c沒有添加任何異步屬性,所以c會率先開始執行(此時會阻塞html的解析)

圖片圖片

執行完成后會繼續解析html

圖片圖片

等解析完成后會開始執行標記了defera.js(a.js在這之前就已加載完成)

圖片圖片

最后標記了asyncb.js加載完成,會立即執行

圖片圖片

責任編輯:武曉燕 來源: 前端南玖
相關推薦

2013-11-20 10:47:57

瀏覽器渲染html

2020-11-06 15:20:45

瀏覽器前端架構

2017-10-09 13:39:26

瀏覽器渲染服務器

2013-11-18 14:42:53

瀏覽器渲染

2019-04-08 10:27:00

渲染瀏覽器DOM

2017-11-21 14:56:59

2012-06-01 10:28:54

Web

2012-06-06 15:57:29

Web

2013-05-23 16:01:56

瀏覽器

2013-06-14 13:56:29

瀏覽器渲染原理

2017-04-26 14:15:35

瀏覽器緩存機制

2013-11-20 13:47:43

瀏覽器渲染引擎

2017-03-08 08:31:48

瀏覽器渲染路徑

2022-08-30 09:01:11

瀏覽器渲染前端

2018-01-19 14:39:53

瀏覽器頁面優化

2017-08-03 12:50:49

Web圖片資源瀏覽器

2021-01-07 07:52:04

瀏覽器網頁資源加載

2015-02-28 09:39:24

Windows 10Spartan

2017-03-12 10:15:18

瀏覽器DOM樹CSSOM樹

2021-12-17 00:02:28

Webpack資源加載
點贊
收藏

51CTO技術棧公眾號

成人免费网站在线观看| 亚洲男人第一av网站| av动漫在线免费观看| 人妻中文字幕一区| 日本欧美一区二区三区乱码| 久久大大胆人体| 国产麻豆xxxvideo实拍| 高清av一区| 亚洲自拍偷拍网站| 日韩欧美一区二区三区久久婷婷| 国产婷婷一区二区三区久久| 国产人成精品一区二区三| 国产一区二区黄| 熟女人妻一区二区三区免费看| 三上悠亚激情av一区二区三区 | 国产大屁股喷水视频在线观看| 美女视频一区| 精品欧美激情精品一区| 自拍偷拍亚洲色图欧美| 天天在线女人的天堂视频| 麻豆国产欧美一区二区三区| 91精品国产电影| 国产探花在线免费观看| 欧美精品尤物在线观看| 亚洲国产精品美女| 欧美专区第二页| 99久久伊人| 精品国产91久久久久久| 香蕉视频在线网址| 国产免费视频在线| 99这里只有久久精品视频| 成人免费高清完整版在线观看| 国产乱国产乱老熟| 亚洲午夜伦理| 欧美理论片在线观看| 日韩av片在线免费观看| 蜜桃一区二区| 亚洲国产日韩欧美在线动漫| 特黄特色免费视频| 国产视频一区二区在线播放| 欧美三区在线观看| 一本大道熟女人妻中文字幕在线| 国产丝袜视频在线播放| 亚洲精品国产一区二区精华液| 午夜一区二区三视频在线观看| 色猫av在线| 波多野结衣亚洲一区| 91青青草免费观看| 97超碰国产在线| 麻豆精品新av中文字幕| 国产精品69av| 伊人久久中文字幕| 日韩精品欧美成人高清一区二区| 欧美在线观看网址综合| 国产成人在线免费观看视频| 国产精品美女久久久| 91国产在线精品| 日韩黄色一级大片| 成人h在线观看| 精品视频免费在线观看| 欧美日产在线观看| 日本黄色福利视频| 亚洲高清国产拍精品26u| 欧美精品 日韩| 992kp免费看片| 中文在线综合| 亚洲成人激情在线| 97人妻精品一区二区三区免| 啄木系列成人av电影| 亚洲毛片在线看| 亚洲高潮女人毛茸茸| 国产精品国产三级国产在线观看 | 999国内精品视频在线| 国产av无码专区亚洲av麻豆| 国产.欧美.日韩| 国产在线精品一区二区中文| 欧美色综合一区二区三区| 久久久一区二区| 美女视频久久| 免费av在线网站| 亚洲综合无码一区二区| 亚洲午夜无码av毛片久久| 日本乱理伦在线| 婷婷六月综合网| 欧美在线观看视频网站| 亚洲人体在线| 亚洲国产女人aaa毛片在线| 永久免费看mv网站入口78| 成人在线免费小视频| 欧美成人合集magnet| 91看片在线播放| 六月婷婷色综合| 国产精品嫩草在线观看| 国产在线观看精品一区| 国产精品久久久久一区二区三区| 黄色三级中文字幕| 欧美特黄aaaaaaaa大片| 日韩一区二区三| www.色天使| 91成人国产| 欧美在线视频在线播放完整版免费观看 | 欧美精选在线播放| 中文写幕一区二区三区免费观成熟| 亚洲我射av| 国产偷亚洲偷欧美偷精品| 91人妻一区二区三区蜜臀| aa级大片欧美三级| 91香蕉国产在线观看| 色久视频在线播放| 亚洲精品国产第一综合99久久 | 欧美一级高潮片| 免费成人在线视频观看| 久久久久久一区| 3d玉蒲团在线观看| 91福利精品视频| 久久久男人的天堂| 爽成人777777婷婷| 欧美在线视频免费播放| 亚洲第一页在线观看| 国产精品久久久久久久久久久免费看| 无码人妻丰满熟妇区96| 97久久亚洲| 日韩视频在线免费观看| 无码人妻av免费一区二区三区| 岛国一区二区在线观看| 综合国产精品久久久| 韩国精品主播一区二区在线观看| 亚洲第一福利网| 国产亚洲美女久久| 亚洲黄色小视频在线观看| 激情视频极品美女日韩| 久久99视频精品| 一级特黄aaa| 亚洲国产精品精华液2区45| 国产91在线视频观看| 99re6热只有精品免费观看| 久久精品国产精品| 中文字幕一区二区三区免费看| 91欧美一区二区| 你懂的av在线| 久久人人爽人人爽人人片av不| 欧美黄色成人网| 国产丰满美女做爰| 亚洲精品日产精品乱码不卡| 日韩a一级欧美一级| 91精品秘密在线观看| 91精品久久久久久久久不口人| 岛国最新视频免费在线观看| 色婷婷精品久久二区二区蜜臂av| 日韩精品电影一区二区| 日日夜夜精品视频天天综合网| 欧美亚洲国产免费| www.成人爱| 亚洲新中文字幕| 中文字幕+乱码+中文字幕明步| 国产欧美一区二区在线观看| 午夜欧美福利视频| 欧美精品一区二区三区精品| 国产精品一区二区三| 最新电影电视剧在线观看免费观看| 欧美色窝79yyyycom| 波多野结衣家庭教师在线观看| 久久精品国产秦先生| 宅男一区二区三区| 亚洲超碰在线观看| 国模视频一区二区| 涩爱av在线播放一区二区| 色婷婷精品久久二区二区蜜臂av| 超薄肉色丝袜一二三| 精品制服美女久久| 女女百合国产免费网站| 超碰精品在线| 国产成人拍精品视频午夜网站| 福利片在线观看| 91精品国产综合久久蜜臀| 久草网视频在线观看| 26uuu久久天堂性欧美| 日韩乱码在线视频| 亚洲综合色一区| 免费在线视频一区| 天堂av在线中文| 九九热hot精品视频在线播放| 日本精品免费观看| 麻豆视频在线观看免费网站| 欧美va亚洲va| 无码人妻一区二区三区免费| 亚洲欧美日韩电影| 强迫凌虐淫辱の牝奴在线观看| 日韩成人精品在线| 性做爰过程免费播放| 欧美日日夜夜| 成人高h视频在线| av白虎一区| 色悠悠国产精品| 亚洲黄色在线播放| 欧美午夜精品理论片a级按摩| 久草视频免费播放| 欧美韩国日本综合| 日本一卡二卡在线| 韩国三级在线一区| 欧美极品欧美精品欧美图片| 91成人观看| 日本中文不卡| av男人一区| 国产精品午夜国产小视频| xxxx另类黑人| xxx成人少妇69| 久久伊伊香蕉| 精品久久久影院| 在线播放成人av| 欧美午夜精品在线| 国产乱国产乱老熟300| 久久久久99精品国产片| 中文字幕第六页| 久久国产精品免费| 欧美视频第三页| 午夜激情一区| 午夜一区二区三区| 综合干狼人综合首页| 99在线观看| 蜜桃在线一区| 国产美女精品视频| 一区一区三区| 1769国内精品视频在线播放| 色多多视频在线观看| 亚洲色图国产精品| 性高潮久久久久久久久久| 日韩美一区二区三区| 国产精品久久久久久无人区| 在线精品视频免费观看| 亚洲午夜18毛片在线看| 亚洲一二三四区| 国产一区二区高清视频| 亚洲熟妇无码久久精品| 欧美性xxxx极品高清hd直播| 国产一卡二卡在线| 亚洲一区二区三区精品在线| 日本在线一级片| 国产精品福利在线播放| 五月激情四射婷婷| 欧美国产一区二区| xxxx日本免费| 国产日韩v精品一区二区| 91精品人妻一区二区三区蜜桃欧美| av在线不卡观看免费观看| 蜜臀av粉嫩av懂色av| 国产aⅴ综合色| 无码人妻一区二区三区免费n鬼沢| 国产精一区二区三区| 色黄视频免费看| 国产精品自拍三区| 午夜诱惑痒痒网| 国产呦萝稀缺另类资源| www.色就是色.com| 韩日欧美一区二区三区| 99久久综合网| 成人av电影免费在线播放| 久久性爱视频网站| av不卡一区二区三区| 亚洲av片不卡无码久久| 久久人人爽爽爽人久久久| 亚洲a v网站| 亚洲国产成人私人影院tom| 波兰性xxxxx极品hd| 亚洲免费观看高清完整版在线观看| 国产免费嫩草影院| 亚洲精品日韩综合观看成人91| 久久久一区二区三区四区| 香港成人在线视频| 天天干,天天干| 欧美裸体bbwbbwbbw| www.97av| 亚洲激情视频在线| 国产高清一区在线观看| www.xxxx欧美| wwwww亚洲| 日韩免费视频在线观看| 免费成人高清在线视频| 99国产高清| 国产麻豆精品久久| 中文字幕一区二区中文字幕| 国产综合自拍| 无码内射中文字幕岛国片| 国产伦精品一区二区三区视频青涩| 亚洲精品国产成人av在线| 91美女视频网站| 欧美一级特黄高清视频| 亚洲国产日韩在线一区模特| 欧美超碰在线观看| 日韩精品一区二区在线| 黄上黄在线观看| 九九久久久久久久久激情| 超碰97在线资源站| 国产精品最新| 在线无限看免费粉色视频| 亚洲精品看片| 视频在线观看免费高清| av影院午夜一区| 四虎地址8848| 日韩欧美亚洲范冰冰与中字| 国产免费视频一区二区三区| 国产偷亚洲偷欧美偷精品| 97超碰在线公开在线看免费| 欧美中在线观看| 欧美成年网站| 亚洲国产日韩综合一区| 亚洲理论在线| 91香蕉视频免费看| 国产三级三级三级精品8ⅰ区| 久久免费公开视频| 欧美日韩色综合| 欧美男男激情freegay| 欧美日韩福利电影| 欧美一级网址| 欧洲亚洲一区二区三区四区五区| 午夜日本精品| 亚洲色图偷拍视频| 国产清纯在线一区二区www| 国产无遮挡aaa片爽爽| 制服视频三区第一页精品| 国产一区电影| 奇米影视亚洲狠狠色| 国产欧美一区二区三区米奇| 看一级黄色录像| 精品在线免费观看| 国产精品免费无码| 色婷婷综合久久久中文一区二区| 日本人妻熟妇久久久久久| 久久亚洲电影天堂| 国产亚洲精彩久久| 亚洲国产一区二区精品视频 | 中文字幕乱码亚洲精品一区| 国产香蕉视频在线| 精品国产乱码久久久久久夜甘婷婷| 免费黄色在线| 成人精品在线视频| 成人高清电影网站| 亚洲综合在线网站| 国产性做久久久久久| 蜜臀精品一区二区三区| 亚洲男人天堂视频| 欧美自拍电影| 日本一区二区三区四区高清视频| 久久国产直播| 熟女俱乐部一区二区| 色一情一乱一乱一91av| 免费在线国产| 国产精品69久久| 青青草综合网| 午夜天堂在线视频| 亚洲欧美日韩国产手机在线| 国产熟女精品视频| 欧美极品第一页| 欧美日韩一本| 情侣黄网站免费看| 国产日韩欧美在线一区| 小泽玛利亚一区二区三区视频| 中国日韩欧美久久久久久久久| 手机看片福利视频| 国内久久婷婷综合| 成人在线观看免费完整| 日韩欧美一级片| av在线小说| 欧美国产综合视频| 美腿丝袜亚洲一区| 国产免费无码一区二区视频| 精品精品国产高清a毛片牛牛| h片在线观看| 日本一区免费看| 久草精品在线观看| 毛片aaaaa| 精品视频—区二区三区免费| 日本精品网站| 热久久最新地址| 久久综合色8888| 中文字幕一二区| 欧美精品在线观看| 久久久亚洲欧洲日产| 午夜激情福利在线| 日韩毛片精品高清免费| 国产成人手机在线| 日韩美女主播视频| 欧美一区二区三区另类 | 国产亚洲精品aa| 国产高清在线免费| 日韩av片永久免费网站| 婷婷丁香综合| 风间由美一二三区av片| 欧美日韩在线播放三区| 免费毛片在线看片免费丝瓜视频 | 久久性感美女视频| 欧美日韩一区二区区别是什么 | www.99av.com| 一区二区三区四区中文字幕| 蜜桃视频在线免费| 96sao精品视频在线观看| 亚洲在线观看| 国产精品成人免费观看| 亚洲欧美激情另类校园| 亚洲国产aⅴ精品一区二区|