本篇內(nèi)容介紹了“如何使用HTML5中script元素async、defer”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)公司專注于噶爾網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供噶爾營(yíng)銷(xiāo)型網(wǎng)站建設(shè),噶爾網(wǎng)站制作、噶爾網(wǎng)頁(yè)設(shè)計(jì)、噶爾網(wǎng)站官網(wǎng)定制、微信小程序開(kāi)發(fā)服務(wù),打造噶爾網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供噶爾網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。創(chuàng)新互聯(lián)專注于墨竹工卡網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供墨竹工卡營(yíng)銷(xiāo)型網(wǎng)站建設(shè),墨竹工卡網(wǎng)站制作、墨竹工卡網(wǎng)頁(yè)設(shè)計(jì)、墨竹工卡網(wǎng)站官網(wǎng)定制、小程序開(kāi)發(fā)服務(wù),打造墨竹工卡網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供墨竹工卡網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。成都創(chuàng)新互聯(lián)公司專注于金川網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供金川營(yíng)銷(xiāo)型網(wǎng)站建設(shè),金川網(wǎng)站制作、金川網(wǎng)頁(yè)設(shè)計(jì)、金川網(wǎng)站官網(wǎng)定制、成都小程序開(kāi)發(fā)服務(wù),打造金川網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供金川網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。
現(xiàn)在WebKit為HTML5實(shí)現(xiàn)了SCRIPT標(biāo)簽的async異步屬性。過(guò)去我們使用各種JavaScript技巧來(lái)做這種事情,但現(xiàn)在新的屬性讓防止阻塞變得相對(duì)容易。
async - HTML屬性
如我前面提到的,添加async屬性非常簡(jiǎn)單:
代碼如下:
<!-- 指定async,以及 onload 回調(diào)-->
<script async src="siteScript.js" onload="myInit()"></script>
事實(shí)上,如果你的JavaScript以及HTML結(jié)構(gòu)設(shè)計(jì)的合理,那么90%的情況下你的Script元素可以使用異步加載。
defer - HTML屬性
Safari 瀏覽器額外添加了defer屬性
代碼如下:
<!-- 指定defer,效果和async差不多-->
<script defer src="siteScript.js" onload="myInit()"></script>
async 與 defer 的差別
WebKit官方博客 很好地解釋了async 與 defer 的不同
------------------------------------
正常情況下,當(dāng)瀏覽器在解析HTML源文件時(shí)如果遇到外部的script,那么解析過(guò)程會(huì)暫停,并發(fā)送請(qǐng)求來(lái)下載script文件,只有script完全下載并執(zhí)行后才會(huì)繼續(xù)執(zhí)行DOM解析。比如:
<script src="myBlockingScript.js"></script>
在下載過(guò)程中瀏覽器是被阻止做其他有用的工作的,包括 解析HTML,執(zhí)行其他腳本,以及展示CSS布局。雖然Webkit預(yù)加載掃描程序可以探測(cè)性地在下載階段進(jìn)行多線程下載,但是某些頁(yè)面仍然存在很大的網(wǎng)絡(luò)延遲。
當(dāng)前有很多技術(shù)來(lái)提升頁(yè)面顯示速度,但都需要額外的代碼以及針對(duì)特定瀏覽器的技巧?,F(xiàn)在,script可以通過(guò)添加async或者defer屬性來(lái)讓腳本不必同步執(zhí)行,示例如下:
代碼如下:
<script async src="myAsyncScript.js" onload="myInit()"></script>
<script defer src="myDeferScript.js" onload="myInit()"></script>
async 和 defer 標(biāo)注的 script 都不會(huì)暫停HTML解析就立刻被下載,兩者都支持onload事件回調(diào)來(lái)解決需要該腳本來(lái)執(zhí)行的初始化。
兩者的區(qū)別在于執(zhí)行時(shí)的不同:
async 腳本在script文件下載完成后會(huì)立即執(zhí)行,并且其執(zhí)行時(shí)間一定在 window的load事件觸發(fā)之前。這意味著多個(gè)async腳本很可能不會(huì)按其在頁(yè)面中的出現(xiàn)次序順序執(zhí)行。
與此相對(duì),瀏覽器確保多個(gè) defer 腳本按其在HTML頁(yè)面中的出現(xiàn)順序依次執(zhí)行,且執(zhí)行時(shí)機(jī)為DOM解析完成后,document的DOMContentLoaded 事件觸發(fā)之前。
下面展示的是一個(gè)需要1秒來(lái)下載,以及1秒來(lái)解析執(zhí)行其他操作的例子,我們可以看到整個(gè)頁(yè)面載入花了大約2秒鐘。
同樣的例子,但這次我們指定了script的 defer 屬性.因?yàn)楫?dāng)defer腳本下載的時(shí)候,其他操作可以并行執(zhí)行,所以大概快了1倍。
------------------------------------
哪些瀏覽器支持async 和 defer
同樣是上面引用的文章中提到:
除了基于Webkit的新版本瀏覽器,FireFox已經(jīng)支持defer和onload屬性很長(zhǎng)時(shí)間了,而且從FF3.6開(kāi)始添加了async屬性。IE同樣支持defer屬性,但還不支持async屬性,從IE9開(kāi)始,onload屬性也將被支持。
aynsc 棒極了!
看到webkit實(shí)現(xiàn)async我開(kāi)心得合不攏嘴了。對(duì)每個(gè)網(wǎng)站來(lái)說(shuō),阻塞都是一個(gè)巨大的性能瓶頸,而可以直接指定script文件異步加載無(wú)疑會(huì)加快web頁(yè)面的速度.
“如何使用HTML5中script元素async、defer”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
名稱欄目:如何使用HTML5中script元素async、defer-創(chuàng)新互聯(lián)
文章出自:http://www.rwnh.cn/article6/cehsog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、全網(wǎng)營(yíng)銷(xiāo)推廣、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)站改版、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容