1.什么是異步組件轮蜕?
? ? 異步組件就是定義的時候什么都不做朽合,只在組件需要渲染(組件第一次顯示)的時候進(jìn)行加載渲染并緩存做入,緩存是以備下次訪問缭嫡。
2.Vue實(shí)現(xiàn)按需加載
? ? Vue實(shí)現(xiàn)按需加載,官方推薦使用結(jié)合webpack的代碼分割功能進(jìn)行惜颇。定義為異步加載的組件雾袱,在打包的時候,會打包成單獨(dú)的js文件存儲在static/js文件夾里面官还,在調(diào)用時使用ajax請求回來插入到html中芹橡。
3.webpack的代碼分割
? ? 這里的require是AMD規(guī)范的引入關(guān)鍵詞,resolve是全部引入成功以后的回調(diào)函數(shù)望伦,第一個參數(shù)是依賴林说,require會先引入依賴模塊,再執(zhí)行回調(diào)函數(shù)屯伞。
4.webpack 2 + ES2015
? ? 推薦使用腿箩,但是webpack > 2.4。這里的import()方法由es6提出劣摇,import()方法是動態(tài)加載珠移,返回一個Promise對象,then方法的參數(shù)是加載到的模塊。類似于Node.js的require方法钧惧,主要import()方法是異步加載的暇韧。
? ? 在路由配置的時候直接調(diào)用HelloWorld就可以了。
? ? import是一個運(yùn)算符浓瞪,返回一個Promise懈玻,模塊加載完成,則Promise resolve vue組件乾颁。
? ? 好像就是定義了一個函數(shù)涂乌,函數(shù)不調(diào)用的時候就不執(zhí)行啊,對不對英岭?只要在什么地方調(diào)用了湾盒,才會執(zhí)行。在路由配置的時候調(diào)用诅妹,才會去執(zhí)行罚勾,去加載這個模塊呀。我說的是不是很有道理漾唉!
5.webpack的另一種代碼分割(推薦)
此方法荧库,多個路由指定相同的hcunkName堰塌,會打包成一個js文件赵刑。vue官網(wǎng)推薦使用webpack的代碼分割進(jìn)行懶加載。此方法依賴于Promise场刑。
webpack編譯時般此,會靜態(tài)的解析代碼中的require.ensure(),同時將模塊添加到一個分開的chunk中牵现,新的chunk會被webpack通過jsonp來按需加載铐懊。此方法內(nèi)部依賴于Promise。
參數(shù)1:是字符串?dāng)?shù)組瞎疼,模塊的依賴科乎,會提前加載。一般都是空的贼急。
參數(shù)2:依賴項加載完成之后的回調(diào)函數(shù)
? ? 所有的依賴加載完成之后茅茂,webpack會執(zhí)行這個回調(diào)函數(shù),require對象的一個實(shí)現(xiàn)會作為一個參數(shù)傳遞給回調(diào)函數(shù)太抓,因此空闲,可以require依賴和其他模塊提供下一步的執(zhí)行。
參數(shù)3:chunk名稱
? ?相同chunk名稱的文件 所有依賴都會被放進(jìn)相同文件束走敌。
? ? 我解釋一下這個原理啊碴倾,在網(wǎng)上找了挺久,都是使用方法,不知道它到底做了什么跌榔,才實(shí)現(xiàn)的異步加載异雁。
? ? webpack把這個模塊導(dǎo)出一個js文件,然后用到這個模塊的時候矫户,就動態(tài)構(gòu)造script標(biāo)簽插入DOM片迅,再由瀏覽器去請求〗粤桑回調(diào)函數(shù)是在依賴加載完成之后執(zhí)行柑蛇。