av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

淺談async、defer以普通script加載的區(qū)別

瀏覽:152日期:2022-06-09 18:32:11

如果用一張圖片詮釋這幾種script加載的特點(diǎn),應(yīng)該是這樣的:

結(jié)合圖片我們可以將三種方式的特點(diǎn)總結(jié)如下:

  • <script> : 當(dāng)HTML解析過程中遇到script標(biāo)簽時(shí),瀏覽器中斷HTML解析,隨即下載script文件,完成后立即執(zhí)行script,執(zhí)行完成后再繼續(xù)HTML解析
  • <script async> : 當(dāng)HTML解析過程中遇到script標(biāo)簽時(shí),不會(huì)中斷HTML解析,同時(shí)并行下載script文件,下載完成后中斷HTML解析執(zhí)行script,執(zhí)行完成后再繼續(xù)HTML解析(script的執(zhí)行順序不一定按照script標(biāo)簽的出現(xiàn)順序,而是取決于script下載完成的順序)
  • <script defer> : 當(dāng)HTML解析過程中遇到script標(biāo)簽時(shí),不會(huì)中斷HTML解析,同時(shí)并行下載script文件,直到HTML解析完成再執(zhí)行script(script的執(zhí)行順序與script標(biāo)簽出現(xiàn)順序一致

我們可以通過一個(gè)小項(xiàng)目驗(yàn)證上面的結(jié)論。

index.html:

<!DOCTYPE html><html lang="en"><head>  <script>    console.time("timer");    console.timeLog("timer", "--- Start parsing HTML");    document.addEventListener("DOMContentLoaded", function () {      console.timeLog("timer", "--- Document loaded");    });  </script></head><body>  <p>    Lorem ipsum dolor sit amet consectetur adipisicing elit. Explicabo harum velit itaque assumenda, quibusdam    obcaecati suscipit quasi odit accusantium soluta qui, debitis quae iusto? Nobis ratione ut nesciunt a minima.  </p>  <!-- 此處省略500行重復(fù)元素 -->  <script>console.timeLog("timer", "--- Start loading 1.js")</script>  <script src="./1.js"></script>  <script>console.timeLog("timer", "--- Start loading 2.js")</script>  <script src="./2.js"></script>  <script>console.timeLog("timer", "--- Start loading 3.js")</script>  <script src="./3.js"></script>  <!-- 此處省略1500行重復(fù)元素 -->   <p>    Lorem ipsum dolor sit amet consectetur adipisicing elit. Explicabo harum velit itaque assumenda, quibusdam    obcaecati suscipit quasi odit accusantium soluta qui, debitis quae iusto? Nobis ratione ut nesciunt a minima.  </p>  <script>    console.timeLog("timer", "--- End parsing HTML")  </script></body></html>

1.js:

const text1 = `  // 超長文本`text1.split(" ");console.timeLog("timer", "--- 1.js excuted");

2.js:

const text2 = `  // 超長文本`text2.split(" ");console.timeLog("timer", "--- 2.js excuted");

3.js:

const text3 = `  // 超長文本`text3.split(" ");console.timeLog("timer", "--- 3.js excuted");

我們分別使用普通、async和defer的方式加載1.js、2.js、3.js,觀察控制臺(tái)的打印結(jié)果:

普通:

結(jié)論:script出現(xiàn)會(huì)中斷HTML加載,且script會(huì)順序的加載、執(zhí)行,所有script執(zhí)行完成后再解析HTML。

Async:

結(jié)論:HTML解析和script下載同步進(jìn)行,script執(zhí)行會(huì)中斷HTML解析;script執(zhí)行順序和tag出現(xiàn)順序不一定相同;script可能會(huì)在document loaded之后執(zhí)行。

Defer:

結(jié)論:HTML解析和script下載同步進(jìn)行;script會(huì)在HTML解析完成后document loaded之前執(zhí)行,且執(zhí)行順序和tag出現(xiàn)順序一致。

由以上實(shí)驗(yàn)可知:如果使用普通方式時(shí)通常建議將script放到<body>的最后,以免阻塞HTML解析影響網(wǎng)頁打開速度。而defer相對(duì)于async更具優(yōu)勢,不會(huì)阻塞HTML解析且script的執(zhí)行順序可以預(yù)測,有一些需要預(yù)先下載執(zhí)行的script可以使用defer的方式在<head>中引用。

到此這篇關(guān)于淺談async、defer以普通script加載的區(qū)別的文章就介紹到這了,更多相關(guān)async、defer以及普通script加載內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 亚洲最大看片网站 | 久久久91精品国产一区二区三区 | 欧美成人精品一区二区男人看 | 欧美电影在线 | 久久久久久国产精品免费免费狐狸 | 国产在线精品免费 | 亚洲欧美精| 夜夜久久 | 精品欧美一区二区在线观看视频 | 蜜桃视频在线观看免费视频网站www | 一区二区不卡高清 | 精品一区二区三区视频在线观看 | 国产精品久久久久久久免费大片 | 伊人无码高清 | 久久国产一区二区 | 99热精品久久 | 色播av| 国产欧美精品区一区二区三区 | 中文字幕av一区二区三区 | 99久久精品免费看国产免费软件 | 日韩久久久久久 | 欧美日韩在线成人 | 韩日精品在线观看 | 国产一区久久 | 18性欧美 | 99久久影院| 国产免费观看久久黄av片涩av | 天堂成人国产精品一区 | 亚洲伊人精品酒店 | 精品真实国产乱文在线 | 久久国产欧美日韩精品 | 日本一本视频 | 日韩精品免费在线观看 | 精品久久久久久久 | 成人精品在线视频 | 久久久久久蜜桃一区二区 | 日韩一区不卡 | 老司机精品福利视频 | 午夜精| 国产成人精品久久二区二区 | 五月婷婷中文 |