日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

js與css的阻塞問題詳析

瀏覽:214日期:2024-03-22 09:58:08
目錄DOMContentLoaded和loadjs 阻塞了什么css 阻塞了什么優化總結DOMContentLoaded和load

我們先了解兩個事件,有助于后面的分析。

load事件:load 應該僅用于檢測一個完全加載的頁面 當一個資源及其依賴資源已完成加載時,將觸發load事件。也就是說,頁面的html、css、js、圖片等資源都已經加載完之后才會觸發 load 事件。

DOMContentLoaded事件:當初始的 HTML 文檔被完全加載和解析完成之后,DOMContentLoaded 事件被觸發,而無需等待樣式表、圖像和子框架的完成加載。也就是說,DOM 樹已經構建完畢就會觸發 DOMContentLoaded 事件。

js 阻塞了什么

因為js在執行的過程中可能會操作DOM,發生回流和重繪,所以GUI渲染線程與JS引擎線程是互斥的。

在解析HTML過程中,如果遇到 script 標簽,渲染線程會暫停渲染過程,將控制權交給 JS 引擎。內聯的js代碼會直接執行,如果是js外部文件,則要下載該js文件,下載完成之后再執行。等 JS 引擎運行完畢,瀏覽器又會把控制權還給渲染線程,繼續 DOM 的解析。

因此,js會阻塞DOM樹的構建。

那么,是否會阻塞頁面的顯示呢?我們用下面的代碼來測試一下。

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <meta http-equiv='X-UA-Compatible' content='IE=edge'> <meta name='viewport' content='width=device-width, initial-scale=1.0'> <title>Document</title></head><body> <div>hello world</div> <script> debugger </script> <div>hello world2</div></body></html>

js與css的阻塞問題詳析

可以看到,這個頁面的DOMContentLoaded發生在2.23s,可見js阻塞了DOM樹的構建。但是,頁面上卻幾乎在一瞬間顯示了hello world,說明js不會阻塞位于它之前的dom元素的渲染。

現代瀏覽器為了更好的用戶體驗,渲染引擎將嘗試盡快在屏幕上顯示的內容。它不會等到所有DOM解析完成后才布局渲染樹。而是當js阻塞發生時,會將已經構建好的DOM元素渲染到屏幕上,減少白屏的時間。

這也是為什么我們會將script標簽放到body標簽的底部,因為這樣就不會影響前面的頁面的渲染。

css 阻塞了什么

當我們解析 HTML 時遇到 link 標簽或者 style 標簽時,就會計算樣式,構建CSSOM。

css不會阻塞dom樹的構建,但是會阻塞頁面的顯示。我們依然用一個例子來測試:

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <meta http-equiv='X-UA-Compatible' content='IE=edge'> <meta name='viewport' content='width=device-width, initial-scale=1.0'> <title>Document</title> <link rel='stylesheet' type='text/css' ></head><body> <div class='woo-spinner-filled'>hello world</div> <div>hello world2</div></body></html>

js與css的阻塞問題詳析

使用一個外部css文件,打開Slow 3G模擬比較慢的網速,可以看到,DOMContentLoaded事件觸發只用了30ms,頁面此時依然是空白,而幾乎是loaded事件2.92s發生時,頁面才出現內容。

原因是,瀏覽器在構建 CSSOM 的過程中,不會渲染任何已處理的內容。即便 DOM 已經解析完畢了,只要 CSSOM 不沒構建好,頁面也不會顯示內容。

只有當我們遇到 link 標簽或者 style 標簽時,才會構建CSSOM,所以如果 link 標簽之前有dom元素,當加載css發生阻

<body> <div class='woo-spinner-filled'>hello world</div> <link rel='stylesheet' type='text/css' > <div>hello world2</div></body>

這樣做會導致一個問題,就是頁面閃爍,在css被加載之前,瀏覽器按照默認樣式渲染 <div class='woo-spinner-filled'>hello world</div>,當css加載完成,會為該div計算新的樣式,重新渲染,出現閃爍的效果。

為了避免頁面閃爍,通常 link 標簽都放在head中。

css會不會阻塞后面js執行?答案是會!

JS 的作用在于修改,它幫助我們修改網頁的方方面面:內容、樣式以及它如何響應用戶交互。這“方方面面”的修改,本質上都是對 DOM 和 CSSDOM 進行修改。當在JS中訪問了CSSDOM中某個元素的樣式,那么這時候就需要等待這個樣式被下載完成才能繼續往下執行JS腳本。

運行下面這個例子,就會發現等css加載完成后,才會在控制臺打印“this is a test”。

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <meta http-equiv='X-UA-Compatible' content='IE=edge'> <meta name='viewport' content='width=device-width, initial-scale=1.0'> <title>Document</title> <link rel='stylesheet' type='text/css' ></head><body> <div class='woo-spinner-filled'>hello world</div> <div>hello world2</div> <script> console.log(’this is a test’) </script></body></html>優化

使用內聯 JavaScript 和 CSS,這樣獲取到 HTML 文件之后就可以直接開始渲染流程了。

并不是所有的場合都適合內聯,那么還可以盡量減少文件大小,比如通過 webpack 等構建工具刪除無用代碼、壓縮 css、JavaScript 文件的體積;并且啟用 CDN 加快文件的下載速度。

對于大的 CSS 文件,可以通過媒體查詢屬性,將其拆分為多個不同用途的 CSS 文件,這樣只有在特定的場景下才會加載特定的 CSS 文件。

如果 JavaScript 文件中沒有操作 DOM 相關代碼,就可以將該 JavaScript 腳本設置為異步加載,通過 async 或 defer 來標記代碼。

<script src='http://m.b3g6.com/bcjs/index.js'></script>//瀏覽器必須等待 index.js 加載和執行完畢才能去做其它事情。<script async src='http://m.b3g6.com/bcjs/index.js'></script>//index.js 的加載是異步的,加載時不會阻塞瀏覽器做任何其它的事情。//當它加載結束,JS 腳本會立即執行。<script defer src='http://m.b3g6.com/bcjs/index.js'></script>//JS 的加載是異步的,執行是被推遲的。//使用了 defer 標記的腳本文件,會等整個文檔解析完成,在 DOMContentLoaded 事件觸發之前執行總結

到此這篇關于js與css的阻塞問題的文章就介紹到這了,更多相關js與css阻塞內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久精品xxxxx| 97精品国产| 狠狠爱成人网| 九九久久婷婷| 宅男噜噜噜66国产日韩在线观看| 久久国产日本精品| 亚洲一级特黄| 欧美日韩激情在线一区二区三区| 在线精品小视频| 99在线精品免费视频九九视| 日韩一区精品视频| 午夜在线精品| 日本亚洲视频在线| 国产亚洲观看| 国产伊人久久| 四虎影视精品| 亚洲欧美日本日韩| 青青在线精品| 四虎国产精品免费观看| 亚洲播播91| 欧美专区一区二区三区| 天堂俺去俺来也www久久婷婷| 国产亚洲精品美女久久| 国产精品麻豆久久| 视频一区中文| 亚洲日本在线观看视频| 欧美啪啪一区| 欧美午夜不卡| 国产精品v日韩精品v欧美精品网站| 黄色成人精品网站| 欧美成人a交片免费看| 久久成人高清| 夜夜嗨一区二区三区| 99国产精品免费视频观看| 日本国产欧美| 麻豆久久久久久| 日韩在线观看不卡| 综合干狼人综合首页| 国产精品亚洲产品| 91精品久久久久久久久久不卡| 亚洲深夜福利在线观看| 欧美一区精品| 日韩欧美午夜| 亚洲香蕉久久| 福利一区在线| 亚洲色图综合| 精品99在线| 香蕉久久夜色精品国产| 国产日本久久| 欧美日韩中文字幕一区二区三区| 婷婷综合福利| 亚洲一级少妇| 日本精品另类| 成人日韩在线| 久久精品72免费观看| 日韩国产网站| 欧美在线观看天堂一区二区三区| 亚洲黄色网址| 欧美中文一区| 狠狠久久婷婷| 精品99在线| 日韩欧美中文在线观看| 91精品xxx在线观看| 日韩一区二区三免费高清在线观看| av在线资源| 日本成人手机在线| 亚洲高清久久| 精品久久久中文字幕| 亚洲精品成a人ⅴ香蕉片| 中文字幕人成乱码在线观看 | 午夜精品亚洲| 欧美精品第一区| 免费在线观看精品| 国产高潮在线| 久久国产三级| 99国产精品私拍| 日韩欧美一区二区三区免费看| 国产日韩一区| 亚洲在线电影| 日本免费久久| 精品视频自拍| 日韩不卡在线观看日韩不卡视频| 亚洲激情不卡| 国产 日韩 欧美一区| 国产精品毛片aⅴ一区二区三区| 丝袜美腿成人在线| 久久九九精品| 国产一区二区精品久| 日韩欧美中文在线观看| 99在线观看免费视频精品观看| 成人久久久久| 老司机免费视频一区二区三区| 日本中文字幕一区二区| 久久电影一区| 五月婷婷亚洲| 99精品电影| 国产美女高潮在线观看| 欧美激情麻豆| 日韩毛片一区| 亚洲色图网站| 蘑菇福利视频一区播放| 欧美日韩国产综合网| 成人日韩在线观看| 黑森林国产精品av| 麻豆精品视频在线观看免费| 欧美日韩a区| 午夜天堂精品久久久久| 久久亚洲一区| 视频一区中文字幕| 老鸭窝毛片一区二区三区| 婷婷久久一区| 影音先锋久久| 99pao成人国产永久免费视频| 99精品视频精品精品视频| 国产不卡精品在线| 国产精品久久观看| sm捆绑调教国产免费网站在线观看| 久久免费福利| 精品一区二区三区四区五区| 丝袜美腿成人在线| 免费在线观看不卡| 视频一区在线视频| 视频一区视频二区中文| 亚洲婷婷免费| 国产精品7m凸凹视频分类| 黄毛片在线观看| 久久天堂av| 亚洲欧美一区在线| 国产精品普通话对白| 国产综合婷婷| 日韩高清电影一区| 午夜久久99| 国产成人精品亚洲线观看| 国产精品蜜芽在线观看| 亚洲香蕉视频| 日韩欧美在线中字| 五月亚洲婷婷 | 97久久超碰| 人在线成免费视频| 免费黄色成人| 欧美经典一区| 综合一区二区三区| 精品美女视频 | 欧美aa在线视频| 综合日韩av| 999国产精品999久久久久久| 国产精品久久久久久久免费软件| 欧美一区二区三区高清视频| 91亚洲国产成人久久精品| 香蕉视频亚洲一级| 国产欧美高清视频在线| 久久久久伊人| 在线亚洲自拍| 久久免费精品| 亚洲精品第一| 免费欧美一区| 日韩视频一二区| 久久久久网站| 日本亚洲最大的色成网站www | 日韩视频在线一区二区三区| 欧美综合社区国产| 国产精品毛片在线| 日欧美一区二区| 国产精成人品2018| 欧美精品资源| 亚洲青青久久| 国产成人77亚洲精品www| 欧美成人高清| 日本aⅴ免费视频一区二区三区| 黄色精品视频| aⅴ色国产欧美| 久久99影视| 欧美日韩视频一区二区三区| 91精品国产经典在线观看| 成人国产精选| 亚洲综合二区| 欧美日本久久| 久久久久中文| 日本aⅴ精品一区二区三区| 岛国精品一区| 日韩在线播放一区二区| 欧美精品99| 午夜日韩在线| 国产精品99久久久久久董美香| 激情欧美一区二区三区| 日本综合精品一区| 亚洲风情在线资源| 日韩不卡一二三区| 欧美日一区二区| 国产日产精品_国产精品毛片| 亚洲夜间福利| 国产精品xxx在线观看| 一区二区三区四区在线看| 日本欧美一区二区在线观看| 色综合www| 国产精品久久久久久久久久齐齐 | 麻豆精品91| 国产一区二区三区天码| 免费久久99精品国产| 久久电影tv|