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 相关文章推荐
js通过地址栏给action传值(中文乱码全是问号)
May 02 Javascript
javascript里绝对用的上的字符分割函数总结
Jul 31 Javascript
如何检测JavaScript的各种类型
Jul 30 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
Dec 14 Javascript
实例解析js中try、catch、finally的执行规则
Feb 24 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
May 11 Javascript
react学习笔记之state以及setState的使用
Dec 07 Javascript
微信小程序之事件交互操作实例分析
Dec 03 Javascript
微信小程序实现定位及到指定位置导航的示例代码
Aug 20 Javascript
jQuery实现滑动星星评分效果(每日分享)
Nov 13 jQuery
JS实现随机点名器
Apr 12 Javascript
JavaScript 异步时序问题
Nov 20 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
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
php防止sql注入的方法详解
2017/02/20 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
jquery offset函数应用实例
2012/11/14 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
Python脚本后台运行的几种方式
2015/03/09 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
Angularjs 实现移动端在线测评效果(推荐)
2017/04/05 Javascript
详解基于DllPlugin和DllReferencePlugin的webpack构建优化
2018/06/28 Javascript
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
JavaScript实现多个物体同时运动
2020/03/12 Javascript
python中pygame模块用法实例
2014/10/09 Python
在Python中定义和使用抽象类的方法
2016/06/30 Python
神经网络python源码分享
2017/12/15 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
np.dot()函数的用法详解
2020/01/17 Python
flask框架url与重定向操作实例详解
2020/01/25 Python
HTML5适合的情人节礼物有纪念日期功能
2021/01/25 HTML / CSS
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
adidas瑞典官方网站:购买阿迪达斯鞋子和运动服
2019/12/11 全球购物
心得体会怎么写
2013/12/30 职场文书
小学新教师培训方案
2014/02/03 职场文书
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
亮化工程实施方案
2014/03/17 职场文书
党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
党员群众路线教育实践活动学习笔记
2014/11/05 职场文书
见习报告格式范文
2014/11/08 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
休假证明书
2015/06/24 职场文书
教师教育心得体会
2016/01/19 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python
Go语言安装并操作redis的go-redis库
2022/04/14 Golang