vue-router和webpack懒加载,页面性能优化篇
在vue单页应用中,当项目不断完善丰富时,即使使用webpack打包,文件依然是非常大的,影响页面的加载。如果我们能把不同路由对应的组件分割成不同的代码块,当路由被访问时才加载对应的组件(也就是按需加载),这样就更加高效了。——引自vue-router官方文档
如何实现??
vue异步组件
vue-router配置路由,使用vue的异步组件技术,可以实现懒加载,代码如下:// 每个组件都会生成一个js文件
import Vue from 'vue'
import Router from 'vue-router'
import Login from '../view/List.vue';
Vue.use(Router);
export default new Router({
routes: [
{
path: '/home/list',
name: 'list',
components: resolve => require(['../view/List.vue'], resolve)
}
],
动态import(webpack > 2.4)
vue、webpack官方推荐
情况一:每个组件都会打包生成一个js文件
const List = () => import('../view/List.vue')
// 在路由配置中什么都不需要改变,像往常一样使用组件:
export default new Router({
routes: [
{
path: '/home/list',
name: 'login',
components: Login
},
{
path: '/home/user',
name: 'user',
components: User
}
],
情况二:所有组件合并打包在一个异步块chunk中
const List = () => import(/* webpackChunkName: "home" */ './List.vue')
const User = () => import(/* webpackChunkName: "home" */ './User.vue')
// 在路由配置中什么都不需要改变,像往常一样使用组件:
export default new Router({
routes: [
{
path: '/home/list',
name: 'list',
components: List
},
{
path: '/home/user',
name: 'user',
components: User
}
],
// 在webpack.base.config.js中配置 ChunkFileName:
output: {
path: config.build.assetsRoot,
filename: '[name].js',
chunkFilename: '[name].js',
publicPath: process.env.NODE_ENV === 'production'
? config.build.assetsPublicPath
: config.dev.assetsPublicPath
},
另一种写法,更简洁:同样需要在webpack.base.config.js中配置 ChunkFileName:
{
path: '/home/list',
name: 'list',
component: () => import(/* webpackChunkName:"list"*/ '../view/List.vue')
},
{
path: '/home/user',
name: 'user',
component: () => import(/* webpackChunkName:"user"*/ '../view/User.vue')
},
webpack提供的require.ensure()
语法如下:摘自官网
require.ensure(dependencies: String[], callback: function(require), chunkName: String
多个路由指定相同的chunkName,在这里chunkName为home,会合并打包成一个js文件。
{
path: '/home/list',
name: 'list',
// component:list
component: r => require.ensure([], () => r(require('../view/Lst.vue')), 'home')
},
{
path: '/home/user',
name: 'user',
// component:user
component: r => require.ensure([], () => r(require('../view/User.vue')), 'home')
}
// 在webpack.base.config.js中配置 ChunkFileName 和 publicPath:
output: {
path: config.build.assetsRoot,
filename: '[name].js',
chunkFilename: '[name].js',
publicPath: './',
publicPath: process.env.NODE_ENV === 'production'
? config.build.assetsPublicPath
: config.dev.assetsPublicPath
},
在实践过程中应该会遇到各种问题,到时候再继续补充,前端新手,多多指教!
来源:https://segmentfault.com/a/1190000017766798
vue-router和webpack懒加载,页面性能优化篇的更多相关文章
- js动态加载js文件(js异步加载之性能优化篇)
1.[基本优化] 将所有需要的<script>标签都放在</body>之前,确保脚本执行之前完成页面渲染而不会造成页面堵塞问题,这个大家都懂. 2.[合并JS代码,尽可能少的使 ...
- Android ViewPager Fragment使用懒加载提升性能
Android ViewPager Fragment使用懒加载提升性能 Fragment在如今的Android开发中越来越普遍,但是当ViewPager结合Fragment时候,由于Androi ...
- 一步一步实现listview加载的性能优化
listview加载的核心是其adapter,本文针对listview加载的性能优化就是对adpter的优化,总共分四个层次: 0.最原始的加载 1.利用convertView 2.利用ViewHol ...
- vue webpack 懒加载
自己项目中的写法 const router = new Router({ routes: [ { path: '/index', component: (resolve) => { requir ...
- vue 路由懒加载 使用,优化对比
vue这种单页面应用,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要加载的内容过多,时间过长,会出啊先长时间的白屏,即使做了loading也是不利于用户体验,而运 ...
- Vue实现一个图片懒加载插件(转载)
Vue是可以自定义指令的,最近学习过程中遇见了一个需要图片懒加载的功能,最后参考了别人的代码和思路自己重新写了一遍.以下将详细介绍如何实现自定义指令v-lazyload. 先看如何使用这个指令: &l ...
- Vue Router根据后台数据加载不同的组件(思考->实现->不止于实现)
实际项目中遇到的需求 同一个链接需要加载不同的页面组件.根据用户所购买服务的不同,有不同的页面展现. 有一些不好的实现方式 直接把这几个组件写在同一个组件下,通过v-if去判断.如果这么做的话,甚至可 ...
- vue + vue-lazyload 实现图片懒加载
1.安装 npm i vue-lazyload -S 2.配置 main.js /***图片模板等懒加载 start ***/ import VueLazyload from 'vue-lazyloa ...
- vue实现menu菜单懒加载
本文将在vue+element ui项目中简单实现menu菜单的懒加载. 最近接到这样的需求:菜单的选项不要固定的,而是下一级菜单选项需要根据上级菜单调接口来获取.what? 这不就是懒加载吗?翻了一 ...
随机推荐
- 设置Linux自启服务以及优先级
一. 启动优先级 今天有一台服务器没有正常启动,原因是有一个服务没有启动起来,因为A服务需要B服务启动之后才能正常启动,所以需要调整A,B服务的启动顺序.在网上查找了一些资料,总结了一下,以备以后需要 ...
- [CSP-S模拟测试]:C(三分+贪心)
题目传送门(内部题46) 输入格式 第一行$3$个整数$n,m,t$.第二行$n$个整数,表示$P_i$.接下来$m$行每行两个整数,表示$L_i,R_i$. 输出格式 一行一个整数表示答案. 样例 ...
- $\LaTeX$数学公式大全4
$4\ Standard\ Function\ Names$将英文转化为罗马文$\arccos$ \arccos$\cos$ \cos$\csc$ \csc$\exp$ \exp$\ker$ \ker ...
- From 7.15 To 7.21
From 7.15 To 7.21 大纲 竞赛 一周七天, 总共做三十五到四十道题吧, 题解要一起写了, 周六之前写不完的话就只能回家补咯 加上考试题总共做了25道题... 还要学计算几何, 生成函数 ...
- C# WebServices 客户端服务端
一.编写一个WebService 开发环境:VS2012 1.编写webservice阶段 打开VS2012,新建一个空的web应用程序,我这里用的Framework版本是4.5的 新建好web应用程 ...
- smarty中ifelse、foreach以及获取数组中键值名的一个实例
<{if empty($history)}> <tr> <td colspan="6">Not any records!</td> ...
- spark streaming 6: BlockGenerator、RateLimiter
BlockGenerator和RateLimiter其实很简单,但是它包含了几个很重要的属性配置的处理,所以记录一下. ))) , SECONDS) From WizNote
- vsftpd 配置上传失败553
1查看ftp服务 ftp://ftpuser:123456@10.11.102.58:8023 2 getsebool -a | grep ftp 临时关闭 [root@xuegod63~]# get ...
- 在jdk7下慎用String.intern()作为synchronized的对象锁
有一段这样的代码: for (int i = 0; i < 10000000; i++) { ("bluedavy" + i).intern(); if(i % 100 == ...
- mysql之索引 应用于事物 内连接、左(外)连接、右(外)连接
什么是索引 索引就像是一本书的目录一样,能够快速找到所需要的内容 索引的作用 加快查询速率,降低IO成本加快表与表之间的连接,减少分组和排序时间 索引类型 普通索引:没有唯一性的基本索引 唯一索引:有 ...