1首先js標(biāo)簽自帶阻塞特性當(dāng)網(wǎng)頁(yè)加載遇到此標(biāo)簽的時(shí)候會(huì)去執(zhí)行下載延刘,并執(zhí)行標(biāo)簽內(nèi)部的函數(shù)方法(慢啊)
2常見(jiàn)做法比如說(shuō)把js放在body底部,這樣就先保證的dom元素的渲染奇钞,再加載js不會(huì)出現(xiàn)視覺(jué)上面的等待空白期
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驯绎,就是所謂的依賴(lài)完慧,不同的js文件直接存在依賴(lài)關(guān)系都是異步加載的話(huà),網(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)行一些模塊化的封裝涨椒。