日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

瀏覽器環(huán)境下JavaScript腳本加載與執(zhí)行探析之defer與async特性( 三 )


3 async特性
3.1 關(guān)于async腳本的執(zhí)行時(shí)機(jī)
async特性是HTML5中引入的特性,使用方式為:async="async",我們首先看一下標(biāo)準(zhǔn)中對(duì)于async特性的相關(guān)描述:
async:If the async attribute is present, then the script will be executed asynchronously, as soon as it is available.
需要指出,這里的異步,指的其實(shí)是異步加載而不是異步執(zhí)行,也就是說,瀏覽器遇到一個(gè)async的script標(biāo)簽時(shí),會(huì)異步的去加載(個(gè)人認(rèn)為這個(gè)過程主要是下載的過程),一旦加載完畢就會(huì)執(zhí)行代碼,而執(zhí)行的過程肯定還是同步的,也就是阻塞的 。我們可以通過下圖來綜合理解defer和async:

瀏覽器環(huán)境下JavaScript腳本加載與執(zhí)行探析之defer與async特性


這樣來看的話,async腳本的執(zhí)行時(shí)機(jī)是無法確定的,因?yàn)槟_本何時(shí)加載完畢也是不確定的 。我們通過下面的demo來感受一下:
async1.js
alert("我是異步的腳本");
HTML代碼:
瀏覽器環(huán)境下JavaScript腳本加載與執(zhí)行探析之defer與async特性


這里我們借用了《瀏覽器環(huán)境下JavaScript腳本加載與執(zhí)行探析之代碼執(zhí)行順序》中的delayfile腳本來提供了一個(gè)延遲,這個(gè)腳本在支持async的瀏覽器中,彈框的順序一般是:我是同步的腳本-》我是異步的腳本 。
3.2 async的瀏覽器支持情況
下面我們來看一下async特性的瀏覽器支持情況:
瀏覽器環(huán)境下JavaScript腳本加載與執(zhí)行探析之defer與async特性


可以看到,只有IE10 才支持async特性,opera mini不支持async特性,另外,async是不支持內(nèi)部腳本的 。
3.3 async總結(jié)
async指的異步腳本,即腳本異步加載,加載的過程不會(huì)造成阻塞,但是async的腳本的執(zhí)行時(shí)機(jī)是不確定的,而且執(zhí)行的順序也是不確定的,因此使用async的腳本應(yīng)該是不依賴于任何代碼的腳本(比如第三方統(tǒng)計(jì)代碼或廣告代碼),否則就會(huì)導(dǎo)致執(zhí)行出錯(cuò) 。
4 defer和async的優(yōu)先級(jí)問題
這一點(diǎn)比較好理解,標(biāo)準(zhǔn)中規(guī)定了:
【瀏覽器環(huán)境下JavaScript腳本加載與執(zhí)行探析之defer與async特性】[1]如果

推薦閱讀