最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2023年05月12日 16:08:24   作者:白哥學(xué)前端  
本文主要介紹了淺談async、defer以普通script加載的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

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

image.png

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

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

我們可以通過一個小項(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,觀察控制臺的打印結(jié)果:

普通:

image.png

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

Async:

image.png

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

Defer:

image.png

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

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

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

相關(guān)文章

  • 教你用wxml2canvas將微信小程序頁面轉(zhuǎn)為圖片

    教你用wxml2canvas將微信小程序頁面轉(zhuǎn)為圖片

    如果需要實(shí)現(xiàn)將小程序的頁面轉(zhuǎn)為圖片,第一步是要先把頁面轉(zhuǎn)為canvas,再將canvas轉(zhuǎn)為圖片,下面這篇文章主要給大家介紹了關(guān)于用wxml2canvas將微信小程序頁面轉(zhuǎn)為圖片的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Javascript 鼠標(biāo)移動上去 滑塊跟隨效果代碼分享

    Javascript 鼠標(biāo)移動上去 滑塊跟隨效果代碼分享

    這篇文章主要介紹了Javascript 鼠標(biāo)移動上去 滑塊跟隨效果代碼,有需要的朋友可以參考一下
    2013-11-11
  • javascript 變量作用域 代碼分析

    javascript 變量作用域 代碼分析

    作用域(scope)是javascript中一項(xiàng)令人棘手的的特性。所有面向?qū)ο缶幊陶Z言都有某種形式的作用域,不過和把這個概念放在什么上下文中有關(guān)。在javascript里,作用域是由函數(shù)劃分的。
    2009-06-06
  • 分享50個超級有用的JavaScript單行代碼(推薦!)

    分享50個超級有用的JavaScript單行代碼(推薦!)

    JavaScript是一種腳本語言,是直接在瀏覽器運(yùn)行的,下面這篇文章主要給大家介紹了50個超級有用的JavaScript單行代碼的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • d3.js實(shí)現(xiàn)圖形縮放平移

    d3.js實(shí)現(xiàn)圖形縮放平移

    這篇文章主要為大家詳細(xì)介紹了d3.js實(shí)現(xiàn)圖形縮放平移效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • JavaScript解決跨域的三種方法小結(jié)

    JavaScript解決跨域的三種方法小結(jié)

    在Web應(yīng)用中,當(dāng)一個網(wǎng)頁的腳本試圖去請求另一個域名下的資源時,就會遇到跨域問題,跨域問題是由瀏覽器的同源策略所引起的,本文給大家介紹了JavaScript解決跨域的三種方法,需要的朋友可以參考下
    2024-03-03
  • javascript IE中的DOM ready應(yīng)用技巧

    javascript IE中的DOM ready應(yīng)用技巧

    當(dāng)我們想在頁面加載之后執(zhí)行某個函數(shù),肯定會想到onload了 但onload在瀏覽器看來,就是頁面上的東西全部都加載完畢后才能發(fā)生,但那就為時已晚了。
    2008-07-07
  • 如何利用JS判斷整數(shù)x是否是回文數(shù)

    如何利用JS判斷整數(shù)x是否是回文數(shù)

    回文數(shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù),下面這篇文章主要給大家介紹了關(guān)于如何利用JS判斷整數(shù)x是否是回文數(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • 利用babel將es6語法轉(zhuǎn)es5的簡單示例

    利用babel將es6語法轉(zhuǎn)es5的簡單示例

    Babel是一個廣泛使用的轉(zhuǎn)碼器,babel可以將ES6代碼完美地轉(zhuǎn)換為ES5代碼,所以下面這篇文章就來給大家詳細(xì)介紹了關(guān)于利用babel將es6語法轉(zhuǎn)es5的相關(guān)資料,文章通過示例介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-12-12
  • 使用javascript控制cookie顯示和隱藏背景圖

    使用javascript控制cookie顯示和隱藏背景圖

    本文主要介紹了使用javascript來控制背景圖片的顯示和隱藏,當(dāng)點(diǎn)擊關(guān)閉按鈕時,控制CSS使頁面不加載背景圖,同時記錄COOKIE相關(guān)參數(shù),并設(shè)置cookie的有效期
    2014-02-02

最新評論

会理县| 察隅县| 黄冈市| 德惠市| 元谋县| 津南区| 吉木萨尔县| 隆尧县| 玉环县| 当雄县| 恭城| 平罗县| 浙江省| 六枝特区| 邯郸市| 师宗县| 綦江县| 内江市| 长兴县| 潞西市| 囊谦县| 商水县| 巨鹿县| 颍上县| 孝昌县| 晴隆县| 建宁县| 东明县| 广安市| 特克斯县| 淮阳县| 广河县| 桓仁| 台安县| 荔浦县| 额敏县| 宁城县| 桂东县| 日照市| 乌兰浩特市| 郎溪县|