1首先js標(biāo)簽自帶阻塞特性當(dāng)網(wǎng)頁(yè)加載遇到此標(biāo)簽的時(shí)候會(huì)去執(zhí)行下載,并執(zhí)行標(biāo)簽內(nèi)部的函數(shù)方法(慢?。?br>
2常見做法比如說(shuō)把js放在body底部,這樣就先保證的dom元素的渲染,再加載js不會(huì)出現(xiàn)視覺上面的等待空白期
3上面的做法比較粗糙,我們也可以使用我們也可以使用元素的屬性defer ,async進(jìn)行異步加載,前者異步元素解析完之后加載,后者只是異步加載,存在瀏覽器兼容性的問(wèn)題
4既然說(shuō)到兼容性那第三方框架最大的基礎(chǔ)特性就是解決兼容性問(wèn)題,
? ? ?a直接ajxa請(qǐng)求js文件這是優(yōu)化方案這也是實(shí)現(xiàn)思路之一
? ? ?b使用市面上常用的lazyload等等這些小型的框架體積也只要4k左右
5異步加載就解決所有問(wèn)題了嗎?然而并不是?正如我們使用的第三方框架一樣經(jīng)常會(huì)先引入jq,就是所謂的依賴,不同的js文件直接存在依賴關(guān)系都是異步加載的話,網(wǎng)絡(luò)情況不可測(cè),報(bào)錯(cuò)就是在所難免,必須保證A.js執(zhí)行完才執(zhí)行B.js。不管是js和jq都有方法支持比如說(shuō)js的loadscript和jq的then都可以,常用的框架就是requirejs就是實(shí)現(xiàn)思想為模塊注入,要用A加載A,先用B加載B。利用這個(gè)可以進(jìn)行一些模塊化的封裝。