精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲午夜福利在线观看| 日韩成人手机在线| 国产精品无码一区二区桃花视频| 亚洲成人日韩| 亚洲精品久久久久国产| 中文字幕国产传媒| 人妖欧美1区| 久久久一区二区| 91老司机在线| 狠狠人妻久久久久久| 66视频精品| 亚洲精品自在久久| 久久久久亚洲av片无码v| 色戒汤唯在线观看| 亚洲视频精选在线| 久久五月天婷婷| 国产免费一区二区三区最新不卡| 国产精品女主播一区二区三区| 久久精品91久久久久久再现| 亚洲色图14p| 免费观看在线一区二区三区| 日本韩国欧美三级| 男人添女人下部高潮视频在观看| 91美女视频在线| 91亚洲男人天堂| 91麻豆蜜桃| 国产精品人人妻人人爽| 久久人人精品| 久久人人爽国产| 欧产日产国产v| 日韩欧美午夜| 亚洲性av在线| 中文字幕av观看| 在线精品国产亚洲| 51午夜精品国产| jizz欧美激情18| 625成人欧美午夜电影| 亚洲国产精品综合小说图片区| 日本免费在线视频观看| 国产福利在线| 国产亚洲欧洲一区高清在线观看| 国产日韩一区欧美| 亚洲av综合色区无码一二三区| 麻豆久久久久久| 国产乱人伦真实精品视频| 免费av中文字幕| 老牛嫩草一区二区三区日本| 欧美一级大片在线观看| 日韩少妇裸体做爰视频| 在线不卡视频| 欧美精品激情在线观看| 久久艹精品视频| 欧美三级网页| 久久久久久久久久久网站| 欧美日韩在线观看成人| 综合在线视频| 欧美第一页在线| 免费人成在线观看| 极品少妇一区二区三区| 久久久久久网站| 日韩欧美三级在线观看| 亚洲欧美bt| 日本精品一区二区三区在线播放视频| 国产99久久久| 日韩国产欧美在线播放| 国产精品欧美在线| 国产精品自产拍| 国产不卡在线播放| 精品高清视频| 欧美孕妇孕交| 国产精品久久久久久久久久久免费看 | 久久久久九九九| 激情小视频在线| 中文字幕永久在线不卡| 在线一区亚洲| 波多野结衣在线播放| 欧美久久一区二区三区| 色婷婷久久久久swag精品| 国产麻花豆剧传媒精品mv在线| 欧美香蕉视频| 欧美日韩精品欧美日韩精品一 | 日本一级淫片演员| caopeng在线| 午夜视频一区在线观看| 超碰97人人射妻| 国产在线|日韩| 欧美丰满少妇xxxxx高潮对白| 亚洲妇女无套内射精| 欧美调教网站| 色噜噜久久综合伊人一本| 午夜69成人做爰视频| 亚洲黄网站黄| 国产日本欧美一区二区三区| 亚洲第一色视频| 久久久一区二区三区捆绑**| 精品一区二区成人免费视频| 多野结衣av一区| 欧美日本国产一区| 亚洲一区二区三区综合| 久久国产亚洲精品| 91国内在线视频| 波多野结衣啪啪| 久久99久久精品| 国产一区不卡在线观看| 1pondo在线播放免费| 亚洲h动漫在线| 一区二区三区 欧美| 成人香蕉社区| 日韩有码在线播放| 天天操天天操天天操天天| 国产在线精品一区二区不卡了| 久久久久天天天天| 91精品久久| 欧美网站一区二区| 在线观看av中文字幕| 中文乱码免费一区二区三区下载| 茄子视频成人在线| 欧美一区二区三区成人片在线| 中文字幕精品一区| 99色精品视频| 大奶在线精品| 欧美日本中文字幕| 国产一区二区视频免费观看| 91麻豆精东视频| www.国产二区| 国产精品高清一区二区| 在线日韩第一页| 日韩 欧美 综合| 成人性视频免费网站| 婷婷视频在线播放| 国产精品久久久久77777丨| 精品亚洲男同gayvideo网站| 亚洲精品午夜久久久久久久| 国产精品亚洲人在线观看| 一区二区精品在线观看| 国产精品字幕| 国产午夜精品视频免费不卡69堂| 国产精品午夜影院| av不卡在线播放| 青青草精品视频在线| 51精品国产| 欧美大片免费观看| 精品人妻伦一二三区久久| 亚洲欧美另类久久久精品 | 亚洲成人精品综合在线| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 国产二区一区| 欧美aaaaaaa| 精品国产乱码久久久久久闺蜜 | 亚洲小说区图片区| 99re在线| 精品一性一色一乱农村| 精品精品国产高清a毛片牛牛 | 色综合亚洲欧洲| 在线观看国产网站| 久久字幕精品一区| 视频一区二区三区免费观看| 福利精品一区| 日韩一区在线视频| 精品国产av一区二区三区| 亚洲精品成人精品456| 成人一区二区三区仙踪林| 亚洲大胆在线| 欧美国产一二三区| 激情小说亚洲| 欧美床上激情在线观看| 亚洲精品国产suv一区| 精品久久久久久久久中文字幕| 女同毛片一区二区三区| 日韩成人伦理电影在线观看| 伊人久久大香线蕉午夜av| 精品视频在线观看免费观看| 欧美第一页在线| 欧洲天堂在线观看| 4438亚洲最大| 国产做受高潮漫动| 国产女人18毛片水真多成人如厕| 国产精品区在线| 欧美日韩视频| 欧美大陆一区二区| 青青草国产一区二区三区| 欧美成在线观看| 男人天堂综合| 91精品婷婷国产综合久久| 日韩高清精品免费观看| 国产欧美一二三区| 精品伦一区二区三区| 老鸭窝91久久精品色噜噜导演| 神马欧美一区二区| 粉嫩久久久久久久极品| 国产精品久久久久久久app| av理论在线观看| 亚洲人成电影网| 国产欧美日韩综合精品一区二区三区| 亚洲成av人影院| 99久久久无码国产精品不卡| 高清视频一区二区| 亚洲成人av免费看| 在线播放日韩| a级网站在线观看| 日韩三级毛片| 999国内精品视频在线| 91精品韩国| 国模吧一区二区三区| 日本亚洲精品| 精品亚洲国产视频| 亚洲第一页在线观看| 欧美三级日韩三级| 91视频免费网址| 一级特黄大欧美久久久| 成年人看的免费视频| 97精品久久久久中文字幕 | 最近2019年好看中文字幕视频| 成人免费一级视频| 欧美一区日韩一区| 国内av在线播放| 精品久久久国产| 校园春色 亚洲| 欧美国产97人人爽人人喊| 国产视频久久久久久| 国产精品一品二品| 欧美成年人视频在线观看| 天堂资源在线中文精品| 131美女爱做视频| 亚洲欧美一区在线| 在线免费观看成人网| 国产毛片一区二区三区| 精品亚洲欧美日韩| 国产精品zjzjzj在线观看| 亚洲综合社区网| av在线亚洲一区| 国产精品一区二区久久| 欧美va视频| 欧美在线视频一二三| www.综合| 午夜精品久久久久久久99热| 牛牛电影国产一区二区| 久久影院资源网| 国产网站在线免费观看| 久久精品人人做人人爽| 欧美成人三区| 久久久999精品| 美女隐私在线观看| 久久精品视频一| 国产在线更新| 久99九色视频在线观看| 影音先锋男人资源在线| 欧美巨乳美女视频| 四虎影视成人| 国模吧一区二区| 在线免费看h| 国产精品成熟老女人| 中文字幕系列一区| 国产美女91呻吟求| 国产亚洲字幕| 成人h视频在线观看| 成人直播在线观看| 久久av一区二区| 国产精品一在线观看| 亚洲二区三区四区| 亚洲最新色图| 欧美无砖专区免费| 亚欧成人精品| 天天爱天天操天天干| 精品一区二区三区的国产在线播放| 日本高清一区二区视频| 国产福利一区二区三区视频 | 成人台湾亚洲精品一区二区 | 国产精品日日摸夜夜爽| 福利一区福利二区| 熟女丰满老熟女熟妇| 久久精品免费在线观看| 一区二区三区在线播放视频| 亚洲美女屁股眼交3| 久久视频免费在线观看| 色婷婷综合久久久| 国产又粗又猛又黄又爽无遮挡| 欧美成人在线直播| 日本韩国一区| xvideos亚洲人网站| 国产精品蜜臀| 国产精品久久久久久av| 亚洲国产精品免费视频| 精品国产免费一区二区三区 | 久久综合一区二区| 国产又粗又长又黄的视频| 亚洲影院理伦片| 99精品人妻国产毛片| 欧美日韩国产高清一区二区 | 中文字幕一区电影| a毛片不卡免费看片| 国产精品久久97| av成人资源网| 亚洲三区在线| 日韩视频中文| 在线观看av免费观看| 97se亚洲国产综合自在线观| 亚洲区一区二区三| 色久综合一二码| 亚洲精华国产精华精华液网站| 国产一区二区三区视频免费| 久草在线视频资源| 国产日本欧美一区二区三区| 西瓜成人精品人成网站| 色哺乳xxxxhd奶水米仓惠香| 国产农村妇女精品一二区| gogo亚洲国模私拍人体| 国产网红主播福利一区二区| 精品少妇一二三区| 欧美日本国产视频| 国内av一区二区三区| 久久人人爽人人爽人人片av高清| 四虎在线精品| 日韩免费电影一区二区| 日韩天堂av| 欧美做受高潮中文字幕| 亚洲欧美中日韩| 亚洲视屏在线观看| 亚洲免费影视第一页| 色呦呦在线观看视频| 国产美女91呻吟求| 日本女优一区| 国产精品99久久免费黑人人妻| 成人黄色综合网站| 国产性xxxx| 7777女厕盗摄久久久| porn视频在线观看| 国产91在线播放| 日韩高清三区| 3d动漫一区二区三区| 福利一区二区在线| 精品视频久久久久| 精品日韩一区二区三区| 黄网站在线免费| 国产伦精品免费视频| 久久激情电影| 污污动漫在线观看| 国产精品天干天干在观线| 波多野结衣视频免费观看| 亚洲毛片在线观看.| 中文字幕一区久| 欧美12av| 日韩电影在线一区二区| 谁有免费的黄色网址| 色综合色综合色综合色综合色综合| 午夜影院免费视频| 欧美有码在线观看| 欧美老女人另类| 欧美一级特黄a| 国产精品久久久久影视| 中文字幕欧美在线观看| 日韩天堂在线视频| 国产精品成人**免费视频| 国产精品88久久久久久妇女| 国产精品一区二区在线观看网站| 欧美日韩午夜视频| 日韩欧美亚洲另类制服综合在线| 精品日韩av| 欧美一区国产一区| 奇米888四色在线精品| 99re6热在线精品视频| 91麻豆精品91久久久久同性| 在线电影福利片| 激情五月综合色婷婷一区二区| 性久久久久久| chinese全程对白| 精品99999| 日本欧美日韩| 欧美性视频在线播放| 国产成人在线看| 欧美亚洲精品天堂| 色综合亚洲精品激情狠狠| 国产不卡精品在线| 少妇高潮毛片色欲ava片| 国产亚洲精品久| 国产乱淫片视频| 午夜美女久久久久爽久久| 国产精品入口久久| 欧美一级特黄aaa| 婷婷综合五月天| 成人在线观看黄色| 91|九色|视频| 久久亚洲欧洲| 18岁成人毛片| 亚洲视频网站在线观看| 爱情电影网av一区二区| 美女日批免费视频| 国产精品国产三级国产a| 黄色三级网站在线观看| 国产福利视频一区| 欧美日韩一区二区高清| 能免费看av的网站| 日韩一区二区三区在线| 二区三区不卡| 久操手机在线视频| 日本一区二区三区四区在线视频| 亚洲精品喷潮一区二区三区 | 精品视频在线播放一区二区三区 | 国产剧情一区二区三区| 少妇太紧太爽又黄又硬又爽|