解决vue项目router切换太慢问题


Posted in Javascript onJuly 19, 2020

问题定位:

随着项目增大,有一天突然发现页面切换时候,要等1-2s页面才切换过去,然后就开始定位问题,刚开始以为时页面组件太多导致的,通过删除组件,发现没啥改善,然后就在两个页面打印日志,第二页面created周期时间和路由切换时间相差不大,可以排除是页面渲染耗时。然后在第一个页面的destroyed周期里面打印日志,发现destroyed->router切换耗时1.5s左右,这时候定位问题是vue的destroyed周期耗时。

destroyed周期耗时:

这时候就考虑destroyed为啥要那么久,这时候就很纳闷,第一反应肯定是页面组件太多,这是把组件都删了,还是很慢,然后页面就剩下一个表格和查询条件,然后就想是不是数据量太大导致destroyed耗时,然后就查页面接口,发现有个list接口有4000多条数据,然后去掉接口,页面切换立马流畅了;就想数据多为啥导致销毁耗时,然后就想到了这个list是下拉框,这4000多条数都渲染在页面上,销毁不耗时才怪呢。

selected下拉框数据多,导致销毁耗时

然后就想办法处理select数据多问题,第一时间想用服务端过滤,想到服务端性能跟不上,只能在前端过滤;然后就想办法在前端过滤,初始化不给值,筛选的时候才给筛选过后的值

remoteMethod(query) {
   if (query !== "") {
    this.selectLoading = true;
    setTimeout(() => {
     this.selectLoading = false;
     this.source.storeSelectList = this.source.storeList.filter(item => {
      return (
       item.storeName && item.storeName.toLowerCase().indexOf(query.toLowerCase()) > -1
      );
     });
    }, 200);
   } else {
    this.source.storeSelectList = this.search.brandId
     ? this.source.storeList
     : [];
   }
  }

补充知识:vue路由懒加载链接过多导致本地开发热更新慢的解决

解决办法

通过vue-cli来构建的项目正常情况下一般的热更新会在1-10s之间,但是当项目中的路由链接数量达到一定数目的时候我发现热更新的速度大幅增加.甚至长达2-3分钟之久,这就让我坚决不能忍了,随便改点东西就要等如此之久…当然这个跟电脑的CPU是有一定关系的

于是开始着手解决问题,不过查了好久愣是没有什么解决办法,后来在一位大佬的帮助下才解决.顺便利用这次机会记录一下这个过程

首先,在router文件下面创立两个js文件,分别为

_import_development.js

_import_production.js

如图:

解决vue项目router切换太慢问题

上代码

_import_development.js

这个文件用作本地开发用

module.exports = file => require('@/views/' + file + '.vue').default

_import_production.js

这个文件用过打包部署用

module.exports = file => () => import('@/views/' + file + '.vue')

然后需要在index.js里面修改一下

const _import = require('./_import_' + process.env.NODE_ENV);

export const routers = [
  {
    path: '/',
    name: 'home',
    meta: { 
      title: '主页'
    },
    component: _import('home')
  },
]

这样修改以后在本地开发就不会出现热更新变慢的情况了

基本都在几秒之内

解决vue项目router切换太慢问题

不过这个方法只限于路由都在前端项目里写固定的情况下

如果是动态路由我没有试过,不清楚有没有用

以上这篇解决vue项目router切换太慢问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript编程起步(第五课)
Jan 10 Javascript
javascript parseInt 函数分析(转)
Mar 21 Javascript
Jquery截取中文字符串的实现代码
Dec 22 Javascript
js中的caller和callee属性介绍和例子
Jun 07 Javascript
Jquery实现由下向上展开效果的例子
Dec 08 Javascript
JavaScript动态创建link标签到head里的方法
Dec 22 Javascript
Javascript 函数的四种调用模式
Nov 05 Javascript
基于Bootstrap表单验证功能
Nov 17 Javascript
Vue组件中的data必须是一个function的原因浅析
Sep 03 Javascript
VUE简单的定时器实时刷新的实现方法
Jan 20 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
May 02 Javascript
Bootstrap table 服务器端分页功能实现方法示例
Jun 01 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
Jul 19 #Javascript
vue2.* element tabs tab-pane 动态加载组件操作
Jul 19 #Javascript
解决vue中el-tab-pane切换的问题
Jul 19 #Javascript
解决echarts图表使用v-show控制图表显示不全的问题
Jul 19 #Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
Jul 19 #Javascript
vue实现的多页面项目如何优化打包的步骤详解
Jul 19 #Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
Jul 19 #Javascript
You might like
建站常用13种PHP开源CMS比较
2009/08/23 PHP
php中++i 与 i++ 的区别
2012/08/08 PHP
使用PHP获取汉字的拼音(全部与首字母)
2013/06/27 PHP
php去除换行(回车换行)的三种方法
2014/03/26 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
Javascript的一种模块模式
2008/03/22 Javascript
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
JQuery中如何传递参数如click(),change()等具体实现
2013/04/28 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
2016/05/23 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
js验证框架之RealyEasy验证详解
2016/06/08 Javascript
详解nodejs 文本操作模块-fs模块(四)
2016/12/22 NodeJs
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
详解vue-router传参的两种方式
2018/09/10 Javascript
JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结
2019/06/27 Javascript
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
深入分析jQuery.one() 函数
2020/06/03 jQuery
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
2020/11/17 Vue.js
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
Python实现ssh批量登录并执行命令
2016/10/25 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
2017/12/14 Python
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
python中如何打包用户自定义模块
2020/09/23 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
HTML5新增的Css选择器、伪类介绍
2013/08/07 HTML / CSS
教育学专业毕业生的自我鉴定
2013/11/26 职场文书
写求职信有什么意义
2014/02/17 职场文书
2014最新党员违纪检讨书
2014/10/12 职场文书
病危通知书样本
2015/04/17 职场文书
python使用glob检索文件的操作
2021/05/20 Python
Python Django获取URL中的数据详解
2021/11/01 Python
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers