CSS樣式表的加載對(duì)于DOM解析,渲染,JS執(zhí)行的阻塞問題

CSS加載問題

  1. css加載會(huì)不會(huì)阻塞DOM樹的解析?

  2. css加載會(huì)不會(huì)阻塞DOM樹的渲染?

  3. css加載會(huì)不會(huì)阻塞后面js語句的執(zhí)行?

<!DOCTYPE html>
<html lang="en">

<head>
    <title>css阻塞</title>
    <meta charset="UTF-8">
    <style>
    h1 {
        color: red !important
    }
    </style>
    <script>
    // 第一次測(cè)試部分
    function h() {
        console.log(document.querySelectorAll('h1'))
    }
    setTimeout(h, 0)
    ///////////////////////
    
    
    
    // 第二次測(cè)試部分
    console.log('before css');
    var startTime = new Date()
    ///////////////////////
    </script>
    <link  rel="stylesheet">
</head>

<body>
    <h1>Hello World!! color:red</h1>

    <script>
    // 第二次測(cè)試
    var endTime = new Date();
    console.log('after css');
    console.log('耗時(shí)' + (endTime - startTime) + 'ms');
    </script>
</body>

</html>
  1. 在Chrome 將網(wǎng)絡(luò)狀態(tài)改成 GPRS 500kb/s 低網(wǎng)速下測(cè)試

  2. css加載(下載)會(huì)阻塞DOM樹的解析渲染嗎? 不會(huì)

    • 由上運(yùn)行我們可以看到,當(dāng)css還沒加載完成的時(shí)候凝赛,h1并沒有顯示,但是此時(shí)控制臺(tái)輸出如下
      NodeList

    • 可以得知戚长,此時(shí)DOM樹至少已經(jīng)解析完成到了h1那里敦腔,而此時(shí)css還沒加載完成缆八,也就說明潜秋,css并不會(huì)阻塞DOM樹的解析蛔琅。

  3. css加載(下載)會(huì)阻塞DOM樹渲染? 會(huì)

    • 由上二次測(cè)試代碼輸出峻呛,我們也可以看到罗售,當(dāng)css還沒加載出來的時(shí)候辜窑,頁面顯示白屏挡闰,直到css加載完成之后肋联,紅色字體才顯示出來,也就是說论泛,下面的內(nèi)容雖然解析了职恳,但是并沒有被渲染出來所禀。所以,css加載會(huì)阻塞DOM樹渲染话肖。

    • 總結(jié): 這可能也是瀏覽器的一種優(yōu)化機(jī)制北秽。因?yàn)槟慵虞dcss的時(shí)候葡幸,可能會(huì)修改下面DOM節(jié)點(diǎn)的樣式最筒,如果css加載不阻塞DOM樹渲染的話,那么當(dāng)css加載完之后蔚叨,DOM樹可能又得重新重繪或者回流了床蜘,這就造成了一些沒有必要的損耗。所以我干脆就先把DOM樹的結(jié)構(gòu)先解析完蔑水,把可以做的工作做完邢锯,然后等你css加載完之后,在根據(jù)最終的樣式來渲染DOM樹搀别,這種做法性能方面確實(shí)會(huì)比較好一點(diǎn)丹擎。

  4. css加載會(huì)阻塞js運(yùn)行嗎?

    • 第二次測(cè)試代碼的結(jié)果
      before css
      等待下載時(shí)間
      after css
      經(jīng)過了5662ms

    • 表明位于css加載語句前的那個(gè)js代碼先執(zhí)行了歇父,但是位于css加載語句后面的代碼遲遲沒有執(zhí)行蒂培,直到css加載完成后,它才執(zhí)行榜苫。這也就說明了护戳,css加載會(huì)阻塞后面的js語句的執(zhí)行。

綜合

  1. css加載不會(huì)阻塞DOM樹的解析

  2. css加載會(huì)阻塞DOM樹的渲染

  3. css加載會(huì)阻塞后面js語句的執(zhí)行垂睬、

  4. 為了避免讓用戶看到長(zhǎng)時(shí)間的白屏?xí)r間媳荒,我們應(yīng)該盡可能的提高css加載速度,比如可以使用以下幾種方法:

    • 使用CDN(因?yàn)镃DN會(huì)根據(jù)你的網(wǎng)絡(luò)狀況驹饺,替你挑選最近的一個(gè)具有緩存內(nèi)容的節(jié)點(diǎn)為你提供資源钳枕,因此可以減少加載時(shí)間)

    • 對(duì)css進(jìn)行壓縮(可以用很多打包工具,比如webpack,gulp等赏壹,也可以通過開啟gzip壓縮)

    • 合理的使用緩存(設(shè)置cache-control,expires,以及E-tag都是不錯(cuò)的么伯,不過要注意一個(gè)問題,就是文件更新后卡儒,你要避免緩存而帶來的影響田柔。其中一個(gè)解決防范是在文件名字后面加一個(gè)版本號(hào))

    • 減少http請(qǐng)求數(shù)俐巴,將多個(gè)css文件合并,或者是干脆直接寫成內(nèi)聯(lián)樣式(內(nèi)聯(lián)樣式的一個(gè)缺點(diǎn)就是不能緩存)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末硬爆,一起剝皮案震驚了整個(gè)濱河市欣舵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缀磕,老刑警劉巖缘圈,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異袜蚕,居然都是意外死亡糟把,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門牲剃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遣疯,“玉大人,你說我怎么就攤上這事凿傅〔” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵聪舒,是天一觀的道長(zhǎng)辨液。 經(jīng)常有香客問我,道長(zhǎng)箱残,這世上最難降的妖魔是什么滔迈? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮被辑,結(jié)果婚禮上燎悍,老公的妹妹穿的比我還像新娘。我一直安慰自己敷待,他們只是感情好间涵,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著榜揖,像睡著了一般勾哩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上举哟,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天思劳,我揣著相機(jī)與錄音,去河邊找鬼妨猩。 笑死潜叛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播威兜,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼销斟,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了椒舵?” 一聲冷哼從身側(cè)響起蚂踊,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎笔宿,沒想到半個(gè)月后犁钟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泼橘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年涝动,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炬灭。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡醋粟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出担败,到底是詐尸還是另有隱情昔穴,我是刑警寧澤镰官,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布提前,位于F島的核電站,受9級(jí)特大地震影響泳唠,放射性物質(zhì)發(fā)生泄漏狈网。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一笨腥、第九天 我趴在偏房一處隱蔽的房頂上張望拓哺。 院中可真熱鬧,春花似錦脖母、人聲如沸士鸥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烤礁。三九已至,卻和暖如春肥照,著一層夾襖步出監(jiān)牢的瞬間脚仔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工舆绎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鲤脏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像猎醇,于是被迫代替她去往敵國(guó)和親窥突。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 昨天為了 了解瀏覽器是怎么處理(.html则拷、.css、.js)這些文件曹鸠,我看了網(wǎng)上的好多資料煌茬,這好多資料中,有很多...
    Miss____Du閱讀 28,878評(píng)論 14 145
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案彻桃? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,728評(píng)論 1 92
  • 轉(zhuǎn)載說明 一坛善、介紹 瀏覽器可以被認(rèn)為是使用最廣泛的軟件,本文將介紹瀏覽器的工作原理邻眷,我們將看到眠屎,從你在地址欄輸入g...
    17碎那年閱讀 2,440評(píng)論 0 22
  • 簡(jiǎn)介瀏覽器可以被認(rèn)為是使用最廣泛的軟件改衩,本文將介紹瀏覽器的工 作原理,我們將看到驯镊,從你在地址欄輸入google.c...
    聽風(fēng)閣閱讀 3,272評(píng)論 0 7
  • 公司的項(xiàng)目越來越大葫督,組件化也提上了議程,先找了幾個(gè)資料學(xué)習(xí)下: 1板惑、蘑菇街LimBoy方案: http://lim...
    大大閑人閱讀 292評(píng)論 0 0