Vue.js如何實現(xiàn)路由懶加載淺析
前言
懶加載也就是延遲加載,不知道大家在工作中有沒有發(fā)現(xiàn),當(dāng)你的SPA(單頁應(yīng)用程序)變得復(fù)雜時,打包構(gòu)建后的Javascript包會變得非常大,以至于嚴重影響頁面的加載時間。幸運的是:vue-router支持WebPack內(nèi)置的異步模塊加載系統(tǒng)。所以,那些使用較少的路由組件不必打包進bundles里,只需要在路由被訪問時按需加載。話不多說了,來一起看看詳細的實現(xiàn)過程:
使用
假設(shè)你的路由配置是這樣的:
import MainPage from './routes/MainPage.vue' import OtherMassivePage from './routes/OtherMassivePage.vue' const routes = [ { path: '/main', component: MainPage }, { path: '/other', component: OtherMassivePage } ]
簡單來說,你可以使用require.ensure
來替代import。它能幫你將OtherMassivePage組件以及該組件的所有依賴分割到一個單獨的chunk中去。
現(xiàn)在重啟你的應(yīng)用,你會發(fā)現(xiàn)并沒有什么改變。但,當(dāng)你打開開發(fā)人員工具,選擇檢查網(wǎng)絡(luò),再一次訪問/other路徑時,你會看到一個新的文件被加載進來。
import MainPage from './routes/MainPage.vue' const OtherMassivePage = r => require.ensure([], () => r(require('./routes/OtherMassivePage.vue'))) const routes = [ { path: '/main', component: MainPage }, { path: '/other', component: OtherMassivePage } ]
是的,這看起來是有點奇怪,相信我,它并不是那么糟糕。
還有一種方法是將路由對應(yīng)的組件定義成異步組件。
寫起來像這樣:
const OtherMassivePage = resolve => { // 空數(shù)組用來指定該路由組件需要加載的依賴 require.ensure([], () => { resolve(require('./routes/OtherMassivePage.vue')) }) }
不過,你最好不要使用這種包裹起來的寫法,因為WebPack會使用靜態(tài)分析來檢測和分割塊。比較好的做法是,將他們寫成一行以減少空間的占用。
按組分塊
有時候我們想把某個路由下的所有組件都打包在同個異步 chunk 中。只需要 給 chunk 命名,提供require.ensure第三個參數(shù)作為 chunk 的名稱:
// 這兩條路由被打包在相同的塊中,訪問任一路由都會延遲加載該路由組件 const OtherMassivePage = r => require.ensure([], () => r(require('./routes/OtherMassivePage.vue')), 'big-pages') const WeightLossPage = r => require.ensure([], () => r(require('./routes/WeightLossPage.vue')), 'big-pages')
不像許多其他的WebPack任務(wù),這個方法出乎意料的簡單,并且能產(chǎn)生意想不到的有用結(jié)果。如果你正在維護那些變得臃腫不堪的大型單頁應(yīng)用,我會毫不猶豫的將這種方法推薦給你。
原文地址: lazy-loading-routes
譯者:jeneser
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
vue2.x中的provide和inject用法小結(jié)
這篇文章主要介紹了vue2.x中的provide和inject用法小結(jié),本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-12-12vue3.0項目小白填坑之vue3.0+vite獲取環(huán)境變量
Vue3項目使用vite作為打包工具時,環(huán)境變量可以保存在.env文件中,在build時進行解析,這篇文章主要給大家介紹了關(guān)于vue3.0項目小白填坑之vue3.0+vite獲取環(huán)境變量的相關(guān)資料,需要的朋友可以參考下2024-03-03vue-cli3.0+element-ui上傳組件el-upload的使用
這篇文章主要介紹了vue-cli3.0+element-ui上傳組件el-upload的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12vue中el-date-picker type=daterange日期清空時不回顯的解決
這篇文章主要介紹了vue中el-date-picker type=daterange日期清空時不回顯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07vue 實現(xiàn)在函數(shù)中觸發(fā)路由跳轉(zhuǎn)的示例
今天小編就為大家分享一篇vue 實現(xiàn)在函數(shù)中觸發(fā)路由跳轉(zhuǎn)的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09