html5中給script標簽引入了 async 和 defer 屬性。
原理:
帶有async屬性的script標簽,會在瀏覽器解析時立即下載腳本同時不阻塞后續的document渲染和script加載等事件,從而實現腳本的異步加載。
使用:
帶有defer屬性的script標簽,和async擁有類似的功能。並且他們有可以附帶一個onload事件<script src="" defer onload="init()">
。
區別:
async和defer的區別在於:async屬性會在腳本下載完成后無序立即執行,defer屬性會在腳本下載完成后按照document結構順序執行。
由於defer和async的兼容性問題,我們通常使用動態創建script標簽
的方式來實現異步加載腳本,即
<script> document.write('<script src="./plugin/lazysizes.min.js" async><\/script>'); </script>
該方式也可以避免阻塞。
注意:document.write()也能寫入含有script標簽的字符串,但是需要轉義。寫入的script標簽中的內容會正常運行。