亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript文件引用方式及其同步執(zhí)行與異步執(zhí)行示例代碼

 更新時(shí)間:2025年08月21日 11:22:01   作者:Yolanda0504  
js是一門單線程語(yǔ)言,因此如果在js的線程中出現(xiàn)耗時(shí)操作,就容易堵塞后續(xù)代碼的執(zhí)行,這篇文章主要介紹了JavaScript文件引用方式及其同步執(zhí)行與異步執(zhí)行的相關(guān)資料,需要的朋友可以參考下

前言

同步加載適用于需要依賴該文件中的代碼執(zhí)行結(jié)果的情況,而異步加載適用于不需要依賴該文件中的代碼執(zhí)行結(jié)果的情況,可以優(yōu)化頁(yè)面加載速度。

一、同步加載

同步加載: 即阻塞模式,會(huì)影響瀏覽器的后續(xù)處理,停止瀏覽器的后續(xù)解析,因此,會(huì)停止瀏覽器后續(xù)對(duì)文件(eg: img)的加載、渲染和執(zhí)行。js 之所以要同步執(zhí)行,是因?yàn)?js 中可能有輸出 document 內(nèi)容、修改dom、重定向等行為,所以默認(rèn)同步執(zhí)行才是安全的。

常見(jiàn)的同步加載方式:

(1)script外鏈

html文件中的<script src='xxx.js'></script> js文件將會(huì)以同步的方式加載。

我們平時(shí)最常使用的就是這種同步加載形式:

<script src="http://yourdomain.com/script.js"></script>

同步模式,又稱阻塞模式,會(huì)阻止瀏覽器的后續(xù)處理,停止了后續(xù)的解析,因此停止了后續(xù)的文件加載(如圖像)、渲染、代碼執(zhí)行。
js 之所以要同步執(zhí)行,是因?yàn)?js 中可能有輸出 document 內(nèi)容、修改dom、重定向等行為,所以默認(rèn)同步執(zhí)行才是安全的。

以前的一般建議是把

(2)h5 中script的新屬性 async 設(shè)定為false ,js文件將會(huì)以同步的方式加載。

(3)html中script標(biāo)簽之間的js代碼 也是同步加載執(zhí)行的。

<script>
//將會(huì)被同步加載執(zhí)行的代碼。
</script>

總的來(lái)說(shuō),瀏覽器在解析 HTML 文檔時(shí),如果遇到 script標(biāo)簽,便會(huì)停下對(duì) HTML 文檔的解析,轉(zhuǎn)而去處理腳本。如果腳本是內(nèi)聯(lián)的,瀏覽器會(huì)先去執(zhí)行這段內(nèi)聯(lián)的腳本,如果是外鏈的,那么先會(huì)去加載腳本,然后再執(zhí)行。等到腳本執(zhí)行結(jié)束后,瀏覽器才會(huì)繼續(xù)解析 HTML 文檔。

二、異步加載

常見(jiàn)的異步加載方式:

1、任何以添加 script 節(jié)點(diǎn)(例如 appendChild(scriptNode) ) 的方式引入的js文件都是異步執(zhí)行的 。

這種技術(shù)可以讓腳本的加載與頁(yè)面的其它部分并行進(jìn)行,下面是一個(gè)示例:

var script = document.createElement(“script”);
script.setAttribute(“src”,“xx.js”);
documenrt.getElementsByTagName(“head”)[0].appendChild(script);

在以上代碼中,創(chuàng)建了一個(gè)新的script元素并指定了其源文件。通過(guò)將這個(gè)元素添加到document.head中,實(shí)現(xiàn)了腳本文件的異步加載。

2.使用async和defer實(shí)現(xiàn)異步加載

使用async屬性:

async屬性允許腳本異步加載。一旦腳本可用,它將盡快執(zhí)行,而不用等到頁(yè)面解析完成。這意味著腳本的執(zhí)行順序無(wú)法保證。

async 屬性詳解:

  • 加載方式: 使用 async 的腳本會(huì)異步加載,與 HTML 解析同時(shí)進(jìn)行。
  • 執(zhí)行順序: 腳本會(huì)在加載完成后立即執(zhí)行,不保證按照它們?cè)陧?yè)面中的出現(xiàn)順序執(zhí)行。
  • 執(zhí)行時(shí)機(jī): 一旦腳本加載完成,就會(huì)立即執(zhí)行,可能會(huì)在 HTML 解析完成之前執(zhí)行,也可能在解析過(guò)程中執(zhí)行。
  • 適用場(chǎng)景: 用于獨(dú)立、不依賴于其他腳本或 DOM 內(nèi)容的腳本,例如分析工具或廣告腳本,因?yàn)樗鼈兛梢员M快執(zhí)行而不影響頁(yè)面的解析。
<script async src="async-script.js"></script>

如果頁(yè)面上存在多個(gè)設(shè)置了async屬性并通過(guò)src引用的外部腳本的

使用defer屬性:

與async屬性類似,defer同樣允許腳本在HTML解析時(shí)異步加載,但腳本只會(huì)在整個(gè)頁(yè)面解析完成后執(zhí)行。使用這種方式,腳本的執(zhí)行順隨是相對(duì)于它們?cè)谖臋n中的出現(xiàn)順序的。

defer 屬性

  • 加載方式: 使用 defer 的腳本在 HTML 解析的同時(shí)異步加載。
  • 執(zhí)行順序: 所有帶有 defer 的腳本會(huì)按照它們?cè)陧?yè)面中的出現(xiàn)順序依次執(zhí)行。
  • 執(zhí)行時(shí)機(jī): 腳本會(huì)在 HTML 文檔解析完畢后執(zhí)行,也就是在 DOMContentLoaded 事件觸發(fā)之前,但不會(huì)阻塞頁(yè)面的解析。
  • 適用場(chǎng)景: 當(dāng)腳本依賴于 DOM 結(jié)構(gòu)時(shí),使用 defer 是理想的,因?yàn)樗WC了腳本執(zhí)行時(shí) DOM 已經(jīng)完全加載完成。

如果頁(yè)面中存在設(shè)置了defer="defer"屬性并且是通過(guò)src引用的外部腳本的

如果頁(yè)面上存在多個(gè)設(shè)置了defer="defer"屬性并通過(guò)src引用的外部腳本的

<script src="example.js" defer></script>
// 正常加載順序從上到下
<script src="./js/test.js"></script> // console.log('這是普通外鏈的js文件');
// 設(shè)置defer屬性
<script defer src="./js/test1.js"></script> // console.log('這是設(shè)置了defer屬性的外鏈的js文件');
// 內(nèi)嵌腳本
<script>
	console.log('這是內(nèi)嵌的JS腳本');
    document.addEventListener('DOMContentLoaded', function () {
      console.log('這是頁(yè)面的DOMContentLoaded事件');
    });
</script>

執(zhí)行結(jié)果:

區(qū)別總結(jié):

  • 加載順序: async 無(wú)序(哪個(gè)腳本先加載完哪個(gè)先執(zhí)行),defer 有序(按照 HTML 中的順序執(zhí)行)。
  • 執(zhí)行時(shí)機(jī): async 腳本一旦加載完成立刻執(zhí)行,defer 腳本會(huì)在 HTML 解析完成之后執(zhí)行。

執(zhí)行時(shí)機(jī)圖示:

  • 普通 script 標(biāo)簽:同步加載,立即阻塞 HTML 解析,加載完畢后執(zhí)行。
  • defer 腳本:異步加載,不阻塞 HTML 解析,等 HTML 全部解析完后按順序執(zhí)行。
  • async 腳本:異步加載,不阻塞 HTML 解析,但加載完畢后立即執(zhí)行,且無(wú)序。

哪個(gè)更好?

當(dāng)腳本依賴于頁(yè)面的 DOM 結(jié)構(gòu)時(shí),使用 defer 更安全。

當(dāng)腳本與其他腳本和頁(yè)面結(jié)構(gòu)無(wú)關(guān)時(shí),可以使用 async 以加快加載和執(zhí)行速度。

不同scritp的加載和執(zhí)行時(shí)機(jī)

總結(jié) 

到此這篇關(guān)于JavaScript文件引用方式及其同步執(zhí)行與異步執(zhí)行的文章就介紹到這了,更多相關(guān)js文件引用方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 前端進(jìn)行雙重身份驗(yàn)證的實(shí)現(xiàn)與思路詳解

    前端進(jìn)行雙重身份驗(yàn)證的實(shí)現(xiàn)與思路詳解

    在傳統(tǒng)的身份驗(yàn)證方案之上,雙重身份驗(yàn)證(Double?Token)作為一?種增強(qiáng)型認(rèn)證方法,逐漸成為現(xiàn)代前端應(yīng)用中的關(guān)鍵技術(shù),下面小編就來(lái)為大家詳細(xì)講講雙重身份驗(yàn)證的實(shí)現(xiàn)與思路吧
    2025-02-02
  • bootstrap-table實(shí)現(xiàn)表頭固定以及列固定的方法示例

    bootstrap-table實(shí)現(xiàn)表頭固定以及列固定的方法示例

    這篇文章主要介紹了bootstrap-table實(shí)現(xiàn)表頭固定以及列固定的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Bootstrap每天必學(xué)之表格

    Bootstrap每天必學(xué)之表格

    Bootstrap每天必學(xué)之表格,向大家分享了幾種最為常用的各種列表展示,希望大家喜歡。
    2015-11-11
  • 淺談Javascript如何實(shí)現(xiàn)勻速運(yùn)動(dòng)

    淺談Javascript如何實(shí)現(xiàn)勻速運(yùn)動(dòng)

    這篇文章主要介紹了淺談Javascript如何實(shí)現(xiàn)勻速運(yùn)動(dòng)的方法及相關(guān)代碼,需要的朋友可以參考下
    2014-12-12
  • JavaScript實(shí)現(xiàn)簡(jiǎn)單的彈窗效果

    JavaScript實(shí)現(xiàn)簡(jiǎn)單的彈窗效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)簡(jiǎn)單的彈窗效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 原生javascript實(shí)現(xiàn)圖片滾動(dòng)、延時(shí)加載功能

    原生javascript實(shí)現(xiàn)圖片滾動(dòng)、延時(shí)加載功能

    這篇文章主要介紹了使用原生javascript實(shí)現(xiàn)圖片滾動(dòng)、延時(shí)加載功能,思路與方法均分享給大家,希望對(duì)大家能有所幫助。
    2015-01-01
  • JavaScript重載函數(shù)實(shí)例剖析

    JavaScript重載函數(shù)實(shí)例剖析

    通過(guò)本文給大家簡(jiǎn)單介紹下JavaScript重載函數(shù)的相關(guān)知識(shí),在js中有沒(méi)有重載函數(shù)這個(gè)概念呢?很多朋友都很模糊,說(shuō)不太清楚,下面通過(guò)本文給大家介紹js重載函數(shù),一起學(xué)習(xí)吧
    2016-05-05
  • 學(xué)習(xí)JavaScript設(shè)計(jì)模式之策略模式

    學(xué)習(xí)JavaScript設(shè)計(jì)模式之策略模式

    這篇文章主要為大家介紹了JavaScript設(shè)計(jì)模式中的策略模式,對(duì)JavaScript設(shè)計(jì)模式感興趣的小伙伴們可以參考一下
    2016-01-01
  • JavaScript中函數(shù)聲明與函數(shù)表達(dá)式的區(qū)別詳解

    JavaScript中函數(shù)聲明與函數(shù)表達(dá)式的區(qū)別詳解

    可能很多朋友只知道兩種聲明方式一個(gè)是函數(shù)聲明一個(gè)是函數(shù)表達(dá)式,具體有什么不同沒(méi)能說(shuō)得很好。事實(shí)上,JavaScript的解析器對(duì)函數(shù)聲明與函數(shù)表達(dá)式并不是一視同仁地對(duì)待的。下面看看這兩者到底有什么不同。
    2016-08-08
  • 前端截圖幾種常用實(shí)現(xiàn)方式總結(jié)

    前端截圖幾種常用實(shí)現(xiàn)方式總結(jié)

    這篇文章主要介紹了前端截圖幾種常用實(shí)現(xiàn)方式,包括使用HTML5的canvas和html2canvas庫(kù)、瀏覽器API以及結(jié)合后端服務(wù),每種方法都有其優(yōu)缺點(diǎn),大家可以根據(jù)需求選擇方法,需要的朋友可以參考下
    2025-03-03

最新評(píng)論