欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談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)文章

  • webpack熱模塊替換(HMR)/熱更新的方法

    webpack熱模塊替換(HMR)/熱更新的方法

    模塊熱替換(HMR)的作用是,在應(yīng)用運(yùn)行時,無需刷新頁面,便能替換、增加、刪除必要的模塊,本篇文章主要介紹了webpack熱模塊替換(HMR)/熱更新的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • javascript使用onclick事件改變選中行的顏色

    javascript使用onclick事件改變選中行的顏色

    javascript onclick事件改變選中行的顏色,方法簡單,大家參考使用吧
    2013-12-12
  • JavaScript實(shí)現(xiàn)簡單計算器小程序

    JavaScript實(shí)現(xiàn)簡單計算器小程序

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)簡單計算器小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • js下利用控制器載入對應(yīng)腳本

    js下利用控制器載入對應(yīng)腳本

    因項(xiàng)目開發(fā)需要,須將每一個方法都獨(dú)立成單獨(dú)的js文件以便載入、維護(hù),所以,必須需要有一個控制器用于載入這些方法。
    2010-07-07
  • css與javascript跨瀏覽器兼容性總結(jié)

    css與javascript跨瀏覽器兼容性總結(jié)

    這篇文章主要介紹了css與javascript跨瀏覽器兼容性,包括常見的css兼容性問題與javascript兼容性問題,以及IE與Firefox等常用瀏覽器的兼容性分析,需要的朋友可以參考下
    2014-09-09
  • javascript跨域原因以及解決方案分享

    javascript跨域原因以及解決方案分享

    這篇文章主要介紹了javascript跨域原因以及解決方案分享,十分的細(xì)致全面,有需要的小伙伴可以參考下。
    2015-04-04
  • 抽出www.templatemonster.com的鼠標(biāo)懸停加載大圖模板的代碼

    抽出www.templatemonster.com的鼠標(biāo)懸停加載大圖模板的代碼

    抽出www.templatemonster.com的鼠標(biāo)懸停加載大圖模板的代碼...
    2007-07-07
  • Uniapp中使用Echarts的詳細(xì)過程

    Uniapp中使用Echarts的詳細(xì)過程

    這篇文章主要介紹了Uniapp中使用Echarts的示例詳解這里只舉例折線圖,介紹了uni-app微信小程序使用echarts的方法,下載echart組件,可以先隨便建個文件夾,然后 npm init,接著下載依賴,需要的朋友可以參考下
    2022-11-11
  • js事件源window.event.srcElement兼容性寫法(詳解)

    js事件源window.event.srcElement兼容性寫法(詳解)

    下面小編就為大家?guī)硪黄猨s事件源window.event.srcElement兼容性寫法(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • 如何通過JS實(shí)現(xiàn)轉(zhuǎn)碼與解碼

    如何通過JS實(shí)現(xiàn)轉(zhuǎn)碼與解碼

    這篇文章主要介紹了如何通過JS實(shí)現(xiàn)轉(zhuǎn)碼與解碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02

最新評論