您好,登錄后才能下訂單哦!
今天小編給大家分享一下HTML5中defer和async有什么區(qū)別的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
在HTML頁面中插入Javascript的主要方法,就是使用<script>元素。這個(gè)元素由Netscape創(chuàng)造并在Netscape Navigator 2中首先實(shí)現(xiàn)。后來,這個(gè)元素就被加入到正式的HTML規(guī)范中。HTML4.01為<script>定義了6個(gè)屬性,包括defer和async。defer和async都是可選的,且只對外部腳本文件有效。
一、當(dāng)瀏覽器解析到script腳本,沒有defer或async時(shí):
<script src="main.js"></script>
瀏覽器會(huì)立即加載并執(zhí)行指定的腳本,“立即”指在渲染該script標(biāo)簽之下的文檔元素之前,也就是說不等待后續(xù)載入的文檔元素,讀到就加載并執(zhí)行。
二、當(dāng)瀏覽器解析到script腳本,有async時(shí):
<script async src="main.js"></script>
瀏覽器會(huì)立即下載腳本,但不妨礙頁面中的其他操作,比如下載其他資源或等待加載其他腳本。加載和渲染后續(xù)文檔元素的過程和main.js的加載與執(zhí)行并行進(jìn)行(異步)。
async不保證按照腳本出現(xiàn)的先后順序執(zhí)行,因此,確保兩者之前互不依賴非常重要,指定async屬性的目的是不讓頁面等待兩個(gè)腳本的下載和執(zhí)行,從而異步加載頁面其他內(nèi)容,建議異步腳本不要在加載期間修改DOM。
異步腳本一定會(huì)在頁面的load事件前執(zhí)行,但可能會(huì)在DOMContentLoaded事件觸發(fā)之前或之后執(zhí)行。支持異步腳本的瀏覽器有Firefox 3.6、Safari 5 和Chrome。
三、當(dāng)瀏覽器解析到script腳本,有defer時(shí):
<script defer="defer" src="main1.js"></script>
<script defer="defer" src="main2.js"></script>
表示腳本會(huì)被延遲到文檔完全被解析和顯示之后再執(zhí)行,加載后續(xù)文檔元素的過程將和main.js的加載并行進(jìn)行(異步)。HTML5規(guī)范要求腳本按照它們出現(xiàn)的先后順序執(zhí)行,因此第一個(gè)延遲腳本會(huì)先于第二個(gè)延遲腳本執(zhí)行,而這兩個(gè)腳本會(huì)先于DOMContentLoaded事件。在現(xiàn)實(shí)當(dāng)中,延遲腳本并不一定會(huì)按照順序執(zhí)行,也不一定會(huì)在DOMContentLoaded事件觸發(fā)前執(zhí)行,因此最好只包含一個(gè)延遲腳本。
IE4~IE7還支持對嵌入腳本的defer屬性,但I(xiàn)E8以及之后的版本則完全支持HTML5規(guī)定的行為。
IE4,F(xiàn)irefox 3.5,Safari 5和Chrome是最早支持defer屬性的瀏覽器。其他瀏覽器胡忽略這個(gè)屬性,像平常一樣處理腳本,為此,把延遲腳本放在頁面底部仍然是最佳選擇。
藍(lán)色線代表網(wǎng)絡(luò)讀取,紅色線代表執(zhí)行時(shí)間,這倆都是針對腳本的;綠色線代表 HTML 解析。
此圖告訴我們以下幾個(gè)要點(diǎn):
defer 和 async 在網(wǎng)絡(luò)讀取(下載)這塊兒是一樣的,都是異步的(相較于 HTML 解析)
它倆的差別在于腳本下載完之后何時(shí)執(zhí)行,顯然 defer 是最接近我們對于應(yīng)用腳本加載和執(zhí)行的要求的
關(guān)于 defer,此圖未盡之處在于它是按照加載順序執(zhí)行腳本的,這一點(diǎn)要善加利用
async 則是一個(gè)亂序執(zhí)行的主,反正對它來說腳本的加載和執(zhí)行是緊緊挨著的,所以不管你聲明的順序如何,只要它加載完了就會(huì)立刻執(zhí)行
仔細(xì)想想,async 對于應(yīng)用腳本的用處不大,因?yàn)樗耆豢紤]依賴(哪怕是最低級的順序執(zhí)行),不過它對于那些可以不依賴任何腳本或不被任何腳本依賴的腳本來說卻是非常合適的,最典型的例子:Google Analytics
以上就是“HTML5中defer和async有什么區(qū)別”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。