defer和async都屬于JS的延遲加載的方法
一丈探、async模式?
當(dāng)瀏覽器遇到script標(biāo)簽時(shí)欺殿,文檔的解析不會停止,其他線程將下載腳本诗箍,腳本下載完成后開始執(zhí)行腳本癣籽,腳本執(zhí)行的過程中文檔將停止解析,直到腳本執(zhí)行完畢滤祖。
二筷狼、defer模式
當(dāng)瀏覽器遇到script標(biāo)簽時(shí),文檔的解析不會停止匠童,其他線程將下載腳本埂材,待到文檔解析完成,腳本才會執(zhí)行汤求。
所以async和defer的最主要的區(qū)別就是async是異步下載并立即執(zhí)行俏险,然后文檔繼續(xù)解析,defer是異步加載后解析文檔扬绪,然后再執(zhí)行腳本竖独。
推薦的應(yīng)用場景
defer 如果你的腳本代碼依賴于頁面中的DOM元素(文檔是否解析完畢),或者被其 他腳本文件依賴挤牛。
可以使用defer優(yōu)化白屏的問題莹痢。解決白屏問題??解決白屏問題??解決白屏問題
例如:評論框
async如果你的腳本并不關(guān)心頁面中的DOM元素(文檔是否解析完畢),并且也不會產(chǎn)生其他腳本需要的數(shù)據(jù)墓赴。
例如:百度統(tǒng)計(jì)
如果不太能確定的話竞膳,用defer總是會比async穩(wěn)定。诫硕。坦辟。