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

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

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

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

image.png

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

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

我們可以通過(guò)一個(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 = `
  // 超長(zhǎng)文本
`
text1.split(' ');
console.timeLog('timer', '--- 1.js excuted');

2.js:

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

3.js:

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

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

普通:

image.png

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

Async:

image.png

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

Defer:

image.png

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

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

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

相關(guān)文章

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

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

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

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

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

    javascript 變量作用域 代碼分析

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

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

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

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

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

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

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

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

    當(dāng)我們想在頁(yè)面加載之后執(zhí)行某個(gè)函數(shù),肯定會(huì)想到onload了 但onload在瀏覽器看來(lái),就是頁(yè)面上的東西全部都加載完畢后才能發(fā)生,但那就為時(shí)已晚了。
    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語(yǔ)法轉(zhuǎn)es5的簡(jiǎn)單示例

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

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

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

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

最新評(píng)論

合山市| 建始县| 年辖:市辖区| 平原县| 罗城| 太仓市| 广饶县| 邵东县| 内江市| 广灵县| 普兰县| 滨海县| 麻城市| 楚雄市| 徐闻县| 斗六市| 海安县| 贵定县| 焉耆| 中山市| 彰化市| 冷水江市| 冀州市| 东宁县| 双鸭山市| 崇明县| 沁阳市| 大埔县| 炎陵县| 沂源县| 司法| 陵水| 日喀则市| 达孜县| 新乡县| 宁晋县| 民勤县| 凉山| 莱阳市| 宜兰县| 桐柏县|