script標(biāo)簽defer和async屬性的區(qū)別

為了提高頁面加載性能拦键,在頁面引入外部js的時(shí)候,可以使用script標(biāo)簽的deferasync屬性來使得外部js異步加載
script標(biāo)簽的使用分為三種情況:

  • 1.<script src="demo.js"></script>

沒有defer或async屬性,瀏覽器會(huì)立即加載并執(zhí)行相應(yīng)的腳本。也就是說在渲染script標(biāo)簽之后的文檔之前,不等待后續(xù)加載的文檔元素设联,讀到就開始加載和執(zhí)行善已,此舉會(huì)阻塞后續(xù)文檔的加載;

  • 2.<script async src="demo.js"></script>

有了async屬性离例,表示后續(xù)文檔的加載和渲染與js腳本的加載和執(zhí)行是并行進(jìn)行的换团,即異步執(zhí)行;

  • 3.<script defer src="demo.js"></script>

有了defer屬性宫蛆,加載后續(xù)文檔的過程和js腳本的加載(此時(shí)僅加載不執(zhí)行)是并行進(jìn)行的(異步)艘包,js腳本的執(zhí)行需要等到文檔所有元素解析完成之后,DOMContentLoaded事件觸發(fā)執(zhí)行之前耀盗。

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


區(qū)別.png

其中藍(lán)色代表js腳本網(wǎng)絡(luò)加載時(shí)間想虎,紅色代表js腳本執(zhí)行時(shí)間,綠色代表html解析袍冷。

從圖中我們可以明確幾點(diǎn):

  1. defer和async在網(wǎng)絡(luò)加載過程是一致的,都是異步執(zhí)行的猫牡;

  2. 兩者的區(qū)別在于腳本加載完成之后何時(shí)執(zhí)行胡诗,可以看出defer更符合大多數(shù)場(chǎng)景對(duì)應(yīng)用腳本加載和執(zhí)行的要求;

  3. 如果存在多個(gè)有defer屬性的腳本淌友,那么它們是按照加載順序執(zhí)行腳本的煌恢;而對(duì)于async,它的加載和執(zhí)行是緊緊挨著的震庭,無論聲明順序如何瑰抵,只要加載完成就立刻執(zhí)行,它對(duì)于應(yīng)用腳本用處不大器联,因?yàn)樗耆豢紤]依賴二汛。

小結(jié):
defer 和 async 的共同點(diǎn)是都是可以并行加載JS文件,不會(huì)阻塞頁面的加載拨拓,不同點(diǎn)是 defer的加載完成之后肴颊,JS會(huì)等待整個(gè)頁面全部加載完成了再執(zhí)行,而async是加載完成之后渣磷,會(huì)馬上執(zhí)行JS婿着,所以假如對(duì)JS的執(zhí)行有嚴(yán)格順序的話,那么建議用 defer加載醋界。

參考: use_async_or_defer
In general, you should always use async or defer for third party scripts (unless the script does something necessary for the critical rendering path):

  • Use async if it's important to have the script run earlier in the loading process. This might include some analytics scripts, for example.

  • Use defer for less critical resources. A video player that's below-the-fold, for example.

Note: If performance is your primary concern, you could wait until your page has reached a key user moment (such as after the critical content has loaded) before adding async scripts. You should also take care not to async load libraries like jQuery just because they are coming from a third-party CDN.

Note: In Blink-based browsers, async and defer currently lower the priority of the network request for resources so it can cause it to load significantly later than it would as a blocking script. This is useful to know in particular for analytics scripts.

Should you ever load third-party scripts without async or defer? You could make a case for this if the script is a crucial part of your site functionality. For example, if you're loading your main UI library or framework from a CDN, it will be badged as "third-party script" in DevTools, but should be treated as an essential part of your site, not an add-on.

Note that not all scripts work if loaded asynchronously. Check the docs for any third-party scripts you're using. If you're using a script that can't be loaded asynchronously, you might want to consider an alternative, or eliminating the script if possible. Some third parties may highly recommend to load their scripts sync (to get ahead of other scripts), even if they would work fine async so do due diligence when evaluating strategies for loading third-party scripts.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末竟宋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子形纺,更是在濱河造成了極大的恐慌丘侠,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逐样,死亡現(xiàn)場(chǎng)離奇詭異婉陷,居然都是意外死亡帚称,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門秽澳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闯睹,“玉大人,你說我怎么就攤上這事担神÷コ裕” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵妄讯,是天一觀的道長(zhǎng)孩锡。 經(jīng)常有香客問我,道長(zhǎng)亥贸,這世上最難降的妖魔是什么躬窜? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮炕置,結(jié)果婚禮上荣挨,老公的妹妹穿的比我還像新娘。我一直安慰自己朴摊,他們只是感情好默垄,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著甚纲,像睡著了一般口锭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上介杆,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天鹃操,我揣著相機(jī)與錄音,去河邊找鬼春哨。 笑死组民,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的悲靴。 我是一名探鬼主播臭胜,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼癞尚!你這毒婦竟也來了耸三?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬榮一對(duì)情侶失蹤浇揩,失蹤者是張志新(化名)和其女友劉穎仪壮,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胳徽,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡积锅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年爽彤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缚陷。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡适篙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出箫爷,到底是詐尸還是另有隱情嚷节,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布虎锚,位于F島的核電站硫痰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏窜护。R本人自食惡果不足惜效斑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望柱徙。 院中可真熱鬧缓屠,春花似錦、人聲如沸坐搔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽概行。三九已至,卻和暖如春弧岳,著一層夾襖步出監(jiān)牢的瞬間凳忙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工禽炬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涧卵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓腹尖,卻偏偏與公主長(zhǎng)得像柳恐,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子热幔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

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