script標(biāo)簽中的defer和async屬性

默認(rèn)情況下,瀏覽器是同步加載 JavaScript 腳本寝贡,即渲染引擎遇到<script>標(biāo)簽就會停下來扒披,等到執(zhí)行完腳本,再繼續(xù)向下渲染兔甘。如果是外部腳本谎碍,還必須加入腳本下載的時間。

如果腳本體積很大洞焙,下載和執(zhí)行的時間就會很長蟆淀,因此造成瀏覽器堵塞,用戶會感覺到瀏覽器“卡死”了澡匪,沒有任何響應(yīng)熔任。這顯然是很不好的體驗,所以瀏覽器允許腳本異步加載唁情,下面就是兩種異步加載的語法疑苔。

<script src="path/to/myModule.js" defer></script>
<script src="path/to/myModule.js" async></script>

上面代碼中,<script>標(biāo)簽打開defer或async屬性甸鸟,腳本就會異步加載惦费。渲染引擎遇到這一行命令兵迅,就會開始下載外部腳本,但不會等它下載和執(zhí)行薪贫,而是直接執(zhí)行后面的命令恍箭。

deferasync的區(qū)別是:defer要等到整個頁面在內(nèi)存中正常渲染結(jié)束(DOM 結(jié)構(gòu)完全生成,以及其他腳本執(zhí)行完成)瞧省,才會執(zhí)行扯夭;async一旦下載完,渲染引擎就會中斷渲染鞍匾,執(zhí)行這個腳本以后交洗,再繼續(xù)渲染。一句話橡淑,defer是“渲染完再執(zhí)行”构拳,async是“下載完就執(zhí)行”。另外梳码,如果有多個defer腳本隐圾,會按照它們在頁面出現(xiàn)的順序加載,而多個async腳本是不能保證加載順序的掰茶。

只有一個腳本的情況

沒有deferasync屬性,瀏覽器會立即下載并執(zhí)行相應(yīng)的腳本蜜笤,并且在下載和執(zhí)行時頁面的處理會停止濒蒋。

<script src="example.js"></script>

有了defer屬性,瀏覽器會立即下載相應(yīng)的腳本把兔,在下載的過程中頁面的處理不會停止沪伙,等到文檔解析完成后腳本才會執(zhí)行。

<script defer src="example.js"></script>

有了async屬性县好,瀏覽器會立即下載相應(yīng)的腳本围橡,在下載的過程中頁面的處理不會停止,下載完成后立即執(zhí)行缕贡,執(zhí)行過程中頁面處理會停止翁授。

<script async src="example.js"></script>

如果同時指定了兩個屬性,則會遵從async屬性而忽略defer屬性晾咪。

<script async src="example.js" defer async></script>

下圖可以直觀的看出三者之間的區(qū)別:


其中藍(lán)色代表js腳本網(wǎng)絡(luò)下載時間收擦,紅色代表js腳本執(zhí)行,綠色代表html解析谍倦。

多個腳本的情況

兩個腳本都沒有deferasync屬性塞赂,瀏覽器會立即下載并執(zhí)行腳本example1.js,在example1.js腳本執(zhí)行完成后才會下載并執(zhí)行腳本example2.js昼蛀,在腳本下載和執(zhí)行時頁面的處理會停止宴猾。

<script src="example1.js"></script>
<script src="example2.js"></script>

有了defer屬性圆存,瀏覽器會立即下載相應(yīng)的腳本example1.jsexample2.js,在下載的過程中頁面的處理不會停止仇哆,等到文檔解析完成才會執(zhí)行這兩個腳本沦辙。

HTML5規(guī)范要求腳本按照它們出現(xiàn)的先后順序執(zhí)行,因此第一個延遲腳本會先于第二個延遲腳本執(zhí)行税产,而這兩個腳本會先于DOMContentLoaded事件執(zhí)行怕轿。

在現(xiàn)實當(dāng)中,延遲腳本并不一定會按照順序執(zhí)行辟拷,也不一定會在DOMContentLoaded事件觸發(fā)前執(zhí)行撞羽,因此最好只包含一個延遲腳本。

<script defer src="example1.js"></script>
<script defer src="example2.js"></script>

有了async屬性衫冻,瀏覽器會立即下載相應(yīng)的腳本example1.js和example2.js诀紊,在下載的過程中頁面的處理不會停止,example1.js和example2.js哪個先下載完成哪個就立即執(zhí)行隅俘,執(zhí)行過程中頁面處理會停止邻奠,但是其他腳本的下載不會停止。標(biāo)記為async的腳本并不保證按照制定它們的先后順序執(zhí)行为居。異步腳本一定會在頁面的load事件前執(zhí)行碌宴,但可能會在DOMContentLoaded事件觸發(fā)之前或之后執(zhí)行。

<script async src="example1.js"></script>
<script async src="example2.js"></script>

小結(jié)

將腳本放在 </body>前面就可以了蒙畴,如果有依賴的則按照順序放好贰镣。如果一定要放在head標(biāo)簽里面,最好是加defer屬性膳凝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碑隆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蹬音,更是在濱河造成了極大的恐慌上煤,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件著淆,死亡現(xiàn)場離奇詭異劫狠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)牧抽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門嘉熊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扬舒,你說我怎么就攤上這事阐肤。” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵孕惜,是天一觀的道長愧薛。 經(jīng)常有香客問我,道長衫画,這世上最難降的妖魔是什么毫炉? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮削罩,結(jié)果婚禮上瞄勾,老公的妹妹穿的比我還像新娘。我一直安慰自己弥激,他們只是感情好进陡,可當(dāng)我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著微服,像睡著了一般趾疚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上以蕴,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天糊饱,我揣著相機(jī)與錄音宁玫,去河邊找鬼好啰。 笑死涡驮,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宝与。 我是一名探鬼主播仆邓,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼伴鳖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起徙硅,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤榜聂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后嗓蘑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體须肆,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年桩皿,在試婚紗的時候發(fā)現(xiàn)自己被綠了豌汇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡泄隔,死狀恐怖拒贱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤逻澳,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布闸天,位于F島的核電站,受9級特大地震影響斜做,放射性物質(zhì)發(fā)生泄漏苞氮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一瓤逼、第九天 我趴在偏房一處隱蔽的房頂上張望笼吟。 院中可真熱鬧,春花似錦霸旗、人聲如沸贷帮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽皿桑。三九已至,卻和暖如春蔬啡,著一層夾襖步出監(jiān)牢的瞬間诲侮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工箱蟆, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留沟绪,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓空猜,卻偏偏與公主長得像绽慈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子辈毯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容