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 相关文章推荐
Firebug入门指南(Firefox浏览器)
Aug 21 Javascript
js滚动条回到顶部的代码
Dec 06 Javascript
用Mootools获得操作索引的两种方法分享
Dec 12 Javascript
js实现表格字段排序
Feb 19 Javascript
js怎么判断flash swf文件是否加载完毕
Aug 14 Javascript
js获取元素的外链样式的简单实现方法
Jun 06 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
Sep 23 Javascript
BootStrap Datetimepicker 汉化的实现代码
Feb 10 Javascript
easyui combogrid实现本地模糊搜索过滤多列
May 13 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
Sep 10 Javascript
Angularjs实现数组随机排序的方法
Oct 02 Javascript
three.js 制作动态二维码的示例代码
Jul 31 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
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
2015/01/22 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
2010/05/04 Javascript
JavaScript几种形式的树结构菜单
2010/05/10 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
nodejs中实现路由功能
2014/12/29 NodeJs
javascript的switch用法注意事项分析
2015/02/02 Javascript
JS实现表格数据各种搜索功能的方法
2015/03/03 Javascript
jQuery实现下拉框选择图片功能实例
2015/08/08 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
ionic实现下拉刷新载入数据功能
2017/05/11 Javascript
bootstrapvalidator之API学习教程
2017/06/29 Javascript
在Swiper内如何制作CSS3动画效果示例代码
2017/12/07 Javascript
Vue2.0学习之详解Vue 组件及父子组件通信
2017/12/12 Javascript
浅谈react-router HashRouter和BrowserRouter的使用
2017/12/29 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
JavaScript交换变量的常用方法小结【4种方法】
2020/05/07 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
python django集成cas验证系统
2014/07/14 Python
Python NumPy库安装使用笔记
2015/05/18 Python
python进阶_浅谈面向对象进阶
2017/08/17 Python
利用Python爬取微博数据生成词云图片实例代码
2017/08/31 Python
详解Python核心编程中的浅拷贝与深拷贝
2018/01/07 Python
Python Pandas 获取列匹配特定值的行的索引问题
2019/07/01 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
2020/03/10 Python
衰败城市英国官网:Urban Decay英国
2020/04/29 全球购物
资产经营总监岗位职责范文
2013/12/01 职场文书
银行工作检查书范文
2014/01/31 职场文书
毕业生工作求职信
2014/06/30 职场文书
房屋租赁协议书
2014/10/18 职场文书
小学语文教学反思范文
2016/03/03 职场文书
python和Appium的移动端多设备自动化测试框架
2022/04/26 Python