<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          CSS加載會造成堵塞嗎?

          共 5442字,需瀏覽 11分鐘

           ·

          2024-05-10 09:15

          點擊上方 前端Q,關(guān)注公眾號

          回復(fù)加群,加入前端Q技術(shù)交流群

          文章來源于稀土掘金技術(shù)社區(qū)——敲代碼的彭于晏
          1. 配置瀏覽器網(wǎng)絡(luò)速度

          首先配置瀏覽器網(wǎng)絡(luò)速度,使現(xiàn)象更明顯。

          1. 打開chrome控制臺(按下F12),選擇No Throttling,并在Custom中選擇Add
          1696733672891.png
          1. 對瀏覽器上傳與下載速度進(jìn)行限制
          1696733695177.png

          2. CSS加載不會堵塞DOM的解析,但會堵塞DOM的渲染

          <!DOCTYPE html>
          <html lang="en">
            <head>
              <title>css阻塞</title>
              <meta charset="UTF-8" />
              <meta name="viewport" content="width=device-width, initial-scale=1" />
              <style>
                h1 {
                  color: red !important;
                }
              
          </style>
              <script>
                function h({
                  console.log(document.querySelectorAll("h1"));
                }
                setTimeout(h, 0);
              
          </script>
              <link
                href="https://cdn.bootcss.com/bootstrap/4.0.0-alpha.6/css/bootstrap.css"
                rel="stylesheet"
              />

            </head>
            <body>
              <h1>這是紅色的</h1>
            </body>
          </html>

          效果:在CSS加載時,JS就能獲取到DOM節(jié)點,說明CSS加載不會堵塞DOM的解析

          1696733748075.png

          使用Performance進(jìn)行分析:可以看到在css加載完成后,DOM渲染才完成,說明CSS加載會堵塞DOM渲染(CSS加載完成前,頁面白屏)

          1696733775214.png
          1. Load:在所有依賴資源加載完觸發(fā)
          2. LCP(largest contentful Paint):頁面最大內(nèi)容渲染時間
          3. FP(First Paint):第一個像素渲染到屏幕上的時間
          4. FCP(First Contentful Paint):渲染出第一個內(nèi)容。內(nèi)容可以是文本、圖片

          3. 原理分析

          3534846-00ef9f3d405462ef.png

          從圖中可知,Chrome瀏覽器渲染流程如下:

          1.解析HTML,生成DOM樹

          2.解析CSS,生成CSS規(guī)則樹

          3.合并DOM樹和CSS規(guī)則樹,生成渲染樹

          4.布局

          5.繪制

          從流程可以看出來,DOM解析和CSS解析是兩個并行的過程,因此CSS加載不會堵塞DOM的解析。但渲染樹依賴CSS規(guī)則樹,因此CSS加載會堵塞DOM的渲染。

          4. CSS加載會堵塞JS運行

          <!DOCTYPE html>
          <html lang="en">
            <head>
              <title>css阻塞</title>
              <meta charset="UTF-8" />
              <meta name="viewport" content="width=device-width, initial-scale=1" />
              <script>
                console.log("before css");
                var startDate = new Date();
              
          </script>
              <link
                href="https://cdn.bootcss.com/bootstrap/4.0.0-alpha.6/css/bootstrap.css"
                rel="stylesheet"
              />

            </head>
            <body>
              <h1>這是紅色的</h1>
              <script>
                var endDate = new Date();
                console.log("after css");
                console.log("經(jīng)過了" + (endDate - startDate) + "ms");
              
          </script>
            </body>
          </html>

          運行結(jié)果:

          1696733909782.png

          說明css會堵塞后面js執(zhí)行

          5. 原理分析

          瀏覽器的渲染進(jìn)程是多線程的,主要分為:GUI渲染線程、JS引擎線程、事件觸發(fā)線程、定時器觸發(fā)器線程、異步http請求線程

          16f7ee2d5b4df806~tplv-t2oaga2asx-jj-mark_3024_0_0_0_q75.png

          由于JS可能會操作之前的DOM節(jié)點和CSS樣式,為了防止渲染出現(xiàn)不可預(yù)期的結(jié)果,瀏覽器設(shè)置 GUI 渲染線程與 JavaScript 引擎為互斥的關(guān)系,因此css會堵塞后面js的執(zhí)行

          6. 結(jié)論

          1. CSS加載不會堵塞DOM的解析,但會堵塞DOM的渲染

          2. CSS加載會堵塞后面JS的執(zhí)行

          往期推薦


          vue3自定義hooks大集合,你要的都在這!
          js如何控制一次只加載一張圖片,加載完成后再加載下一張
          面試官:假如有幾十個請求,如何去控制并發(fā)?

          最后


          • 歡迎加我微信,拉你進(jìn)技術(shù)群,長期交流學(xué)習(xí)...

          • 歡迎關(guān)注「前端Q」,認(rèn)真學(xué)前端,做個專業(yè)的技術(shù)人...

          點個在看支持我吧

          瀏覽 154
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  在线播放精品 | 99国产视频 | 国产女人18毛片水18精品变态 | 免费靠逼网站 | 成年人免费大香蕉 |