Vue代码分割懒加载的实现方法


Posted in Javascript onNovember 23, 2017

什么是懒加载

懒加载也叫延迟加载,即在需要的时候进行加载,随用随载。

为什么需要懒加载

在单页应用中,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要加载的内容过多,延时过长,不利于用户体验,而运用懒加载则可以将页面进行划分,需要的时候加载页面,可以有效的分担首页所承担的加载压力,减少首页加载用时

如何与webpack配合实现组件懒加载

1、在webpack配置文件中的output路径配置chunkFilename属性

output: {
path: resolve(__dirname, 'dist'),
filename: options.dev ? '[name].js' : '[name].js?[chunkhash]',
chunkFilename: 'chunk[id].js?[chunkhash]',
publicPath: options.dev ? '/assets/' : publicPath
},

chunkFilename路径将会作为组件懒加载的路径

2、配合webpack支持的异步加载方法

  • resolve => require([URL], resolve), 支持性好
  • () => system.import(URL) , webpack2官网上已经声明将逐渐废除, 不推荐使用
  • () => import(URL), webpack2官网推荐使用, 属于es7范畴, 需要配合babel的syntax-dynamic-import插件使用, 具体使用方法如下
npm install --save-dev babel-core babel-loader babel-plugin-syntax-dynamic-import babel-preset-es2015
use: [{
loader: 'babel-loader',
options: {
presets: [['es2015', {modules: false}]],
plugins: ['syntax-dynamic-import']
}
}]

引言

而在webpack > 2的时代,vue做代码分割懒加载更加的easy,不需要loader,不需要require.ensure。

import解决一切。

分割层级

Vue代码分割懒加载包含如下几个层级:

      1、 组件层级分割懒加载

      2、 router路由层级

      3、 Vuex 模块

组件层级代码分割

//全局组件
Vue.component('AsyncComponent', () => import('./AsyncComponent'))

//局部注册组件
new Vue({
 // ...
 components: {
 'AsyncComponent': () => import('./AsyncComponent')
 }
})

// 如果不是default导出的模块
new Vue({
 // ...
 components: {
 'AsyncComponent': () => import('./AsyncComponent').then({ AsyncComponent }) => AsyncComponent
 }
})

路由层级代码分割

const AsyncComponent= () => import('./AsyncComponent')

new VueRouter({
 routes: [
 { path: '/test', component: AsyncComponent}
 ]
})

Vuex 模块代码分割,vuex中有动态注册模块方法,同时也是加上import

const store = new Vuex.Store()

import('./store/test').then(testModule => {
 store.registerModule('test', testModule)
})

总结

在一般项目中,我们按照router和components层面分割(或者只使用router分割)就足够了。大型项目可能三者都会用到,但用法都很简单,不是么?

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
Apr 27 Javascript
jqTransform form表单美化插件使用方法
Jul 05 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
Apr 30 Javascript
jQuery基于当前元素进行下一步的遍历
May 20 Javascript
js简单工厂模式用法实例
Jun 30 Javascript
easyUI实现(alert)提示框自动关闭的实例代码
Nov 07 Javascript
浅谈React中组件间抽象
Jan 27 Javascript
chosen实现省市区三级联动
Aug 16 Javascript
Vue实现6位数密码效果
Aug 18 Javascript
javascript匿名函数中的'return function()'作用
Oct 15 Javascript
ES6知识点整理之对象解构赋值应用示例
Apr 17 Javascript
JSON是什么?有哪些优点?JSON和XML的区别?
Apr 29 Javascript
初探js和简单隐藏效果的实例
Nov 23 #Javascript
详解如何在angular2中获取节点
Nov 23 #Javascript
Vuejs中使用markdown服务器端渲染的示例
Nov 22 #Javascript
浅谈Vue-cli 命令行工具分析
Nov 22 #Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
Nov 22 #Javascript
深入理解Vue官方文档梳理之全局API
Nov 22 #Javascript
初识 Vue.js 中的 *.Vue文件
Nov 22 #Javascript
You might like
zf框架的数据库追踪器使用示例
2014/03/13 PHP
php实现概率性随机抽奖代码
2016/01/02 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
thinkphp的dump函数无输出实例代码
2016/11/15 PHP
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
document.getElementBy("id")与$("#id")有什么区别
2013/09/22 Javascript
JS截取字符串常用方法详细整理
2013/10/28 Javascript
一个JavaScript去除字符串末尾的空白实例代码
2014/09/22 Javascript
javascript 动态创建表格
2015/01/08 Javascript
基于jQuery实现收缩展开功能
2016/03/18 Javascript
详解javascript跨浏览器事件处理程序
2016/03/27 Javascript
第五篇Bootstrap 排版
2016/06/21 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
vue短信验证性能优化如何写入localstorage中
2018/04/25 Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
2018/11/26 Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
2020/10/29 Javascript
[03:31]DOTA2英雄基础教程 大地之灵
2013/12/17 DOTA
python动态参数用法实例分析
2015/05/25 Python
基于wxpython实现的windows GUI程序实例
2015/05/30 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
python实现键盘输入的实操方法
2019/07/16 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
python进程间通信Queue工作过程详解
2019/11/01 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
CSS3实现复选框动画特效示例代码
2016/09/27 HTML / CSS
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
美国婴儿和儿童服装购物网站:PatPat
2020/10/01 全球购物
汉语言文学毕业生求职信
2013/10/01 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
小平小道观后感
2015/06/09 职场文书
Django项目如何正确配置日志(logging)
2021/04/29 Python
《游戏王:大师决斗》新活动上线 若无符合卡组可免费租用
2022/04/13 其他游戏
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS