解决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 相关文章推荐
获取客户端电脑日期时间js代码(jquery)
Sep 12 Javascript
jQuery ReferenceError: $ is not defined 错误的处理办法
May 10 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
Jun 21 Javascript
原生JavaScript+LESS实现瀑布流
Dec 12 Javascript
jquery解析XML及获取XML节点名称的实现代码
May 18 Javascript
javascript 四十条常用技巧大全
Sep 09 Javascript
详解vue项目首页加载速度优化
Oct 18 Javascript
详解React之key的使用和实践
Sep 29 Javascript
新版小程序登录授权的方法
Dec 12 Javascript
js Math数学简单使用操作示例
Mar 13 Javascript
基于javascript处理二进制图片流过程详解
Jun 08 Javascript
vue实现数字滚动效果
Jun 29 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
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
2015/12/19 PHP
详解PHP防止直接访问.php 文件的实现方法
2017/07/28 PHP
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
JQuery中Text方法用法实例分析
2015/05/18 Javascript
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
2015/08/05 Javascript
设置点击文本框或图片弹出日历控件的实现代码
2016/05/12 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
javascript简单进制转换实现方法
2016/11/24 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
浅析vue中常见循环遍历指令的使用 v-for
2018/04/18 Javascript
小程序实现发表评论功能
2018/07/06 Javascript
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
Vue CL3 配置路径别名详解
2019/05/30 Javascript
新手快速入门微信小程序组件库 iView Weapp
2019/06/24 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
vue 实现把路由单独分离出来
2020/08/13 Javascript
vue实现两个区域滚动条同步滚动
2020/12/13 Vue.js
部署Python的框架下的web app的详细教程
2015/04/30 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
关于python多重赋值的小问题
2019/04/17 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
Python面向对象之继承和多态用法分析
2019/06/08 Python
蛋白质世界:Protein World
2017/11/23 全球购物
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
在职人员函授期间自我评价分享
2013/11/08 职场文书
经理职责范文
2013/11/08 职场文书
人力资源部培训专员岗位职责
2014/01/02 职场文书
会计毕业自我鉴定
2014/02/05 职场文书
人生感悟经典句子
2019/08/20 职场文书
SQL写法--行行比较
2021/08/23 SQL Server
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android