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 showModelDialog的使用方法示例详解
Nov 19 Javascript
js导航栏单击事件背景变换示例代码
Jan 13 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
Jan 26 Javascript
jQuery 中的 DOM 操作
Apr 26 Javascript
基于原生JS实现图片裁剪
Aug 01 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
Sep 28 Javascript
详谈Node.js之操作文件系统
Aug 29 Javascript
浅谈express 中间件机制及实现原理
Aug 31 Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
Feb 10 Javascript
详解a标签添加onclick事件的几种方式
Mar 29 Javascript
一些手写JavaScript常用的函数汇总
Apr 16 Javascript
jQuery实现B2B网站后台管理系统侧导航
Jul 08 jQuery
初探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
星际争霸任务指南——虫族
2020/03/04 星际争霸
php下将XML转换为数组
2010/01/01 PHP
php 处理上百万条的数据库如何提高处理查询速度
2010/02/08 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
2015/11/09 PHP
浅谈PHP错误类型及屏蔽方法
2017/05/27 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
javascript 一个函数对同一元素的多个事件响应
2009/07/25 Javascript
Javascript的一种模块模式
2010/09/08 Javascript
javascript定时保存表单数据的代码
2011/03/17 Javascript
通过JS来判断页面控件是否获取焦点
2014/01/03 Javascript
flag和jq on 的绑定多个对象和方法(必看)
2017/02/27 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
2017/08/16 jQuery
纯js实现画一棵树的示例
2017/09/05 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
2017/12/18 Javascript
vue watch关于对象内的属性监听
2019/04/22 Javascript
layui表格数据重载
2019/07/27 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
全面解析js中的原型,原型对象,原型链
2021/01/25 Javascript
[06:35]2014DOTA2国际邀请赛 老男孩梦圆西雅图中国军团世界最强
2014/07/22 DOTA
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
python中requests模块的使用方法
2015/04/08 Python
Flask框架的学习指南之开发环境搭建
2016/11/20 Python
Python中 map()函数的用法详解
2018/07/10 Python
Django基于客户端下载文件实现方法
2020/04/21 Python
使用Html5实现异步上传文件,支持跨域,带有上传进度条
2016/09/17 HTML / CSS
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
香港莎莎官网Sasa.com:亚洲著名国际化妆品商城
2019/11/10 全球购物
普罗米修斯教学反思
2014/02/06 职场文书
交通安全寄语大全
2014/04/08 职场文书
勤俭节约演讲稿
2014/05/08 职场文书
关于学习的决心书
2015/02/05 职场文书
2015年加油站站长工作总结
2015/05/27 职场文书
php TP5框架生成二维码链接
2021/04/01 PHP
新手初学Java List 接口
2021/07/07 Java/Android