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获取触发事件元素在整个网页中的绝对坐标(示例代码)
Dec 13 Javascript
js Dialog 去掉右上角的X关闭功能
Apr 23 Javascript
JS实现清除指定cookies的方法
Sep 20 Javascript
javascript制作网页图片上实现下雨效果
Feb 26 Javascript
js实现不重复导入的方法
Mar 02 Javascript
jQuery  ready方法实现原理详解
Oct 19 Javascript
JS中跨页面调用变量和函数的方法(例如a.js 和 b.js中互相调用)
Nov 01 Javascript
基于jQuery实现Tabs选项卡自定义插件
Nov 21 Javascript
AngularJS学习笔记之表单验证功能实例详解
Jul 06 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
Nov 04 Javascript
JS实现的新闻列表自动滚动效果示例
Jan 30 Javascript
Vue.js实现可排序的表格组件功能示例
Feb 19 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
咖啡机如何保养和日常清洁?
2021/03/03 冲泡冲煮
图书管理程序(一)
2006/10/09 PHP
php xfocus防注入资料
2008/04/27 PHP
用php实现选择排序的解决方法
2013/05/04 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
2014/07/23 PHP
PHP读取mssql json数据中文乱码的解决办法
2016/04/11 PHP
Yii编程开发常见调用技巧集锦
2016/07/15 PHP
php 二维数组快速排序算法的实现代码
2017/10/17 PHP
laravel接管Dingo-api和默认的错误处理方式
2019/10/25 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
Ruffy javascript 学习笔记
2009/11/30 Javascript
js操纵跨frame的三级联动select下拉选项实例介绍
2013/05/19 Javascript
jquery更换文章内容与改变字体大小代码
2013/09/30 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
js数组循环遍历数组内所有元素的方法
2014/01/18 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
2017/05/26 Javascript
JavaScript实现简单动态进度条效果
2018/04/06 Javascript
jQuery实现的模仿雨滴下落动画效果
2018/12/11 jQuery
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
python制作企业邮箱的爆破脚本
2016/10/05 Python
Selenium鼠标与键盘事件常用操作方法示例
2018/08/13 Python
OpenCV模板匹配matchTemplate的实现
2019/10/18 Python
python的slice notation的特殊用法详解
2019/12/27 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
基于Keras的格式化输出Loss实现方式
2020/06/17 Python
Groupon西班牙官方网站:在线优惠券和交易,节省高达70%
2021/03/13 全球购物
军人违纪检讨书
2014/02/04 职场文书
安全生产活动月方案
2014/03/09 职场文书
2014年安全员工作总结
2014/11/13 职场文书
合理化建议书
2015/02/04 职场文书
草房子读书笔记
2015/06/29 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript