濮阳杆衣贸易有限公司

主頁 > 知識庫 > 淺談HTML5 defer和async的區(qū)別

淺談HTML5 defer和async的區(qū)別

熱門標簽:濟南辦理400電話 鄭州電銷外呼系統(tǒng)違法嗎 威海營銷外呼系統(tǒng)招商 漳州人工外呼系統(tǒng)排名 農(nóng)村住宅地圖標注 中紳電銷智能機器人 鶴壁手機自動外呼系統(tǒng)怎么安裝 ai電銷機器人連接網(wǎng)關(guān) 跟電銷機器人做同事

在HTML頁面中插入Javascript的主要方法,就是使用<script>元素。這個元素由Netscape創(chuàng)造并在Netscape Navigator 2中首先實現(xiàn)。后來,這個元素就被加入到正式的HTML規(guī)范中。HTML4.01為<script>定義了6個屬性,包括defer和async。defer和async都是可選的,且只對外部腳本文件有效。
 
一、當瀏覽器解析到script腳本,沒有defer或async時:
 
<script src="main.js"></script>

瀏覽器會立即加載并執(zhí)行指定的腳本,“立即”指在渲染該script標簽之下的文檔元素之前,也就是說不等待后續(xù)載入的文檔元素,讀到就加載并執(zhí)行。
 
二、當瀏覽器解析到script腳本,有async時:
 
<script async src="main.js"></script>

瀏覽器會立即下載腳本,但不妨礙頁面中的其他操作,比如下載其他資源或等待加載其他腳本。加載和渲染后續(xù)文檔元素的過程和main.js的加載與執(zhí)行并行進行(異步)。
 
async不保證按照腳本出現(xiàn)的先后順序執(zhí)行,因此,確保兩者之前互不依賴非常重要,指定async屬性的目的是不讓頁面等待兩個腳本的下載和執(zhí)行,從而異步加載頁面其他內(nèi)容,建議異步腳本不要在加載期間修改DOM。
 
異步腳本一定會在頁面的load事件前執(zhí)行,但可能會在DOMContentLoaded事件觸發(fā)之前或之后執(zhí)行。支持異步腳本的瀏覽器有Firefox 3.6、Safari 5 和Chrome。
 
三、當瀏覽器解析到script腳本,有defer時:
 
<script defer="defer" src="main1.js"></script>
<script defer="defer"  src="main2.js"></script>

表示腳本會被延遲到文檔完全被解析和顯示之后再執(zhí)行,加載后續(xù)文檔元素的過程將和main.js的加載并行進行(異步)。HTML5規(guī)范要求腳本按照它們出現(xiàn)的先后順序執(zhí)行,因此第一個延遲腳本會先于第二個延遲腳本執(zhí)行,而這兩個腳本會先于DOMContentLoaded事件。在現(xiàn)實當中,延遲腳本并不一定會按照順序執(zhí)行,也不一定會在DOMContentLoaded事件觸發(fā)前執(zhí)行,因此最好只包含一個延遲腳本。
 
IE4~IE7還支持對嵌入腳本的defer屬性,但IE8以及之后的版本則完全支持HTML5規(guī)定的行為。
 
IE4,F(xiàn)irefox 3.5,Safari 5和Chrome是最早支持defer屬性的瀏覽器。其他瀏覽器胡忽略這個屬性,像平常一樣處理腳本,為此,把延遲腳本放在頁面底部仍然是最佳選擇。
 
藍色線代表網(wǎng)絡讀取,紅色線代表執(zhí)行時間,這倆都是針對腳本的;綠色線代表 HTML 解析。
 
此圖告訴我們以下幾個要點:
 
defer 和 async 在網(wǎng)絡讀取(下載)這塊兒是一樣的,都是異步的(相較于 HTML 解析)

它倆的差別在于腳本下載完之后何時執(zhí)行,顯然 defer 是最接近我們對于應用腳本加載和執(zhí)行的要求的

關(guān)于 defer,此圖未盡之處在于它是按照加載順序執(zhí)行腳本的,這一點要善加利用

async 則是一個亂序執(zhí)行的主,反正對它來說腳本的加載和執(zhí)行是緊緊挨著的,所以不管你聲明的順序如何,只要它加載完了就會立刻執(zhí)行

仔細想想,async 對于應用腳本的用處不大,因為它完全不考慮依賴(哪怕是最低級的順序執(zhí)行),不過它對于那些可以不依賴任何腳本或不被任何腳本依賴的腳本來說卻是非常合適的,最典型的例子:Google Analytics

以上這篇淺談HTML5 defer和async的區(qū)別就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

原文地址:http://www.cnblogs.com/shouce/archive/2016/06/07/5565898.html

標簽:咸陽 萍鄉(xiāng) 營口 甘南 惠州 文山 紅河 蘇州

巨人網(wǎng)絡通訊聲明:本文標題《淺談HTML5 defer和async的區(qū)別》,本文關(guān)鍵詞  淺談,HTML5,defer,和,async,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《淺談HTML5 defer和async的區(qū)別》相關(guān)的同類信息!
  • 本頁收集關(guān)于淺談HTML5 defer和async的區(qū)別的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    科技| 三都| 高淳县| 东至县| 宁海县| 安塞县| 武宁县| 通江县| 开远市| 长泰县| 安平县| 江西省| 三都| 遂川县| 蓬莱市| 静安区| 新乡县| 黔西| 井研县| 汉寿县| 汕头市| 成都市| 新建县| 江陵县| 东兴市| 广昌县| 五莲县| 鞍山市| 宜宾县| 达日县| 苗栗县| 册亨县| 栾城县| 广昌县| 扎囊县| 安徽省| 洪湖市| 祁连县| 蕉岭县| 奉化市| 泸定县|