vue按需加载

2018-05-18  本文已影响0人  心斐

问题

一个单页面应用,采用组件化的开发模式,没有采用懒加载,运用webpack打包,每次启动首页都会加载全部组件,但此时只是访问了首页而已,就造成了大量组件污染加载的情况。

需求

只在访问当前页面时加载对应组件,避免页面组件全部加载。

解决

我们可以通过实现路由懒加载和异步组件解决问题。

文档资料:
异步组件:组件-Vue.js
路由懒加载:懒加载·GitBook

在项目中的具体实现

路由懒加载

在vue项目中使用路由懒加载非常简单,我们要做的就是把路由对应的组件定义成异步组件:

router.js

// 单独引入
import App from '../App'

// 其他路由异步加载
// require.ensure 是 Webpack 的特殊语法,用来设置 code-split point,实现代码分割
const home = r => require.ensure([], () => r(require('../page/home/home')), 'home')
const city = r => require.ensure([], () => r(require('../page/city/city')), 'city')

export default [{
    path: '/',
    component: App, //顶层路由,对应index.html
    children: [ //二级路由。对应App.vue
        //地址为空时跳转home页面
        {
            path: '',
            redirect: '/home'
        },
        //首页城市列表页
        {
            path: '/home',
            component: home
        },
        //当前选择城市页
        {
            path: '/city/:cityid',
            component: city
            // or
            //component: resolve => { require(['../page/city/city'], resolve); }
        }
    ]
}]

注意

文档:webpack 如何使用 require.ensure() 进行代码拆分。

// require.ensure()语法:
require.ensure(dependencies: String[], callback: function(require), chunkName: String)

require接收三个参数:

main.js

最后,不要忘记在main.js将router引入。

import routes from './router/router'
上一篇 下一篇

猜你喜欢

热点阅读