當一個Vue的項目體積變得十分龐大的時候,使用Webpack的代碼分離功能將Vue Components
,routes
或Vuex
的代碼進行分離并按需加載,會極大的提高App的首屏加載速度。
在Vue的項目中,我們可以在三種不同的情況下使用懶加載和代碼分離功能:
Vue組件,也稱為異步組件
Vue-Router
Vuex
三者的共同點都是使用的動態import,這在Webpack的第二個版本就開始被支持。
在Vue組件中進行懶加載
在Eggheads中有關于使用Vue異步組件實現按需加載組件的解釋。
實現異步組件只需要使用import
函數去注冊組件即可:
Vue.component('AsyncCmp', () => import('./AsyncCmp'))
也可以使用本地注冊組件的方式:
new Vue({ // ... components: { 'AsyncCmp': () => import('./AsyncCmp') } })
使用箭頭函數指向import
函數,Vue
將會在需要該組件的時候才執行請求加載該組件的代碼。
如果導入的組件是使用命名的方式進行導出的,你可以在Promise
的返回值中使用對象解構的方式實現按需加載組件。下面是加載KeenUI的 UiAlert組件的例子:
components: { UiAlert: () => import('keen-ui').then(({ UiAlert }) => UiAlert) }
在Vue router中進行懶加載
Vue router在原生支持懶加載。和懶加載組件的方式一樣,都是使用import
函數。例如我們想在/login
這個路由下懶加載Login
組件。
// 不再使用 import Login from './login' const Login = () => import('./login') new VueRouter({ routes: [ { path: '/login', component: Login } ] })
在Vuex中進行懶加載
Vuex的registerModule
方法允許我們動態的創建Vuex的模塊。如果我們使用import
函數在Promise
中返回模塊作為載荷(payload),就實現了懶加載。
const store = new Vuex.Store() ... // 假設我們想加載'login'這個模塊 import('./store/login').then(loginModule => { store.registerModule('login', loginModule) })
總結
在Vue + Webpack中是懶加載十分簡單。趕快使用上面學習到的方法將你的Vue項目進行代碼分離并在它們需要的時候進行按需加載,這樣可以顯著減少應用首屏加載的時間。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com