vue项目--浏览器出现卡顿及崩溃的原因查找与解决方案

最近客户反应在操作页面的过程中出现了卡顿甚至交互多一点浏览器直接崩溃了。项目的技术是vue + svg 所以我一直在想是不是svg交互导致的,但是svg涉及的交互也不是很多,不至于产生崩溃状态呀!后来又怀疑是代码问题,于是对大家都知道的一些内存泄露的情况进行了排查:

  • 没有全局变量
  • 没有定时器
  • 没有使用未销毁的全局事件和第三方库
  • v-if和v-show合理使用了,v-if和v-for合理使用了
  • 没有使用watch
  • ...
    确保代码层面是没有问题的,但是打开任务管理器,内存的确在随着点击选择交互而飙升。为了排查哪里出了问题,这里使用了 vue-devtools 选择 Performance

然后点击 Start 进行卡顿的操作后再点击 Stop ,原因一目了然:

Σ(っ °Д °;)っ 找到交互中的下拉框,原来是页面中的下拉框的数据太多了导致的页面卡顿~

解决方案

试将下拉框的数据减少,再进行同样的操作,耗时小了90倍(笑哭~~)

我的业务场景是下拉数据是通过接口一把获取的,之前没有那么多的数据,问题没有暴露,随着业务迭代数据达到几百至几千条。问题暴露了~
一般情况下,在网上可以搜到一堆对下拉数据进行远程搜索和分页处理,而本案例根据实际业务情况进行了下巧妙处理:

第一步:在data中设置一个变量moreNum:20,表示每次最多显示20条;

第二步:在组件中进行如下操作,当数量多于20条的时候,不再显示

          <el-option-group v-for="group in oOtherArr" :key="group.label" :label="group.label">
              <template v-for="(item,num) in group.options">
                <el-option
                  :key="item.text"
                  :label="item.text"
                  :value="item.text"
                  v-if="item.text && (group.label === '从库中选择' ? num < moreNum :  true)"
                ></el-option>
              </template>
              <div
                v-if="group.label === '从库中选择' && group.options.length > moreNum"
                class="search-keyword-more"
              >
                只显示前{{moreNum}}条库中结果,请完善搜索关键字
              </div>
            </el-option-group>

显示结果:

第三步:支持筛选,筛选后返回适配的20条数据

第四步:用户不明觉厉的反馈,哈哈哈~

第五步:总结,小细节引发的大问题,需要记录下,以后再遇到类似操作要学会问题规避和风险预测!

原文地址:https://www.cnblogs.com/webhmy/p/12162675.html

时间: 2024-08-05 03:16:26

vue项目--浏览器出现卡顿及崩溃的原因查找与解决方案的相关文章

Android app优化之导致app 卡顿慢的直接原因

大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能.从设计师的角度,他们希望App能够有更多的动画,图片等时尚元素来实现流畅的用户体验.但是Android系统很有可能无法及时完成那些复杂的界面渲染操作.Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps,为了能够实现60fps,这意味着程序的大多数操作都必须在16ms内完成()时间超出16ms越多,丢的帧就越多,可以大概估计一下Android 5秒没响应抛

【文章学习】监控网页卡顿、崩溃

[学习文章] 1.如何监控网页的卡顿:https://zhuanlan.zhihu.com/p/39292837 2.如何监控网页的崩溃:https://zhuanlan.zhihu.com/p/40273861 知识延展.补充: 1.PWA (Google Progressive Web App)概念 渐进式网页应用.一个利用现代浏览器的能力来达到类似APP的用户体验的技术,由Google实现,让浏览器打开的网址像APP一样运行在手机上.让Web App和Native App之间的差距更小.

queued frame 造成图形性能卡顿

曾经遇到过卡顿是类似的原因:当时对显卡底层知识理解不懂,看到引擎底层有一个MaskFramexxx的接口,实现是使用注册表修改显卡底层的注册信息,当时还是一个掉接口习惯的客户端码农的思维,没理解底层含义却不小心改成了30.于是游戏就开始每隔一会儿就卡一下了. 调试过程中使用了伟大的CPU卡顿PROFILE工具.GPU工具PERFHUD等,依然未果.最后在老大的睿智下发现了这个问题,于是对这个点儿牢记于心了. queued frame 这个一般都是限制gpu不会落后cpu(render threa

解决:ScrollView中嵌套ListView,使得listview上下滑动卡顿现象

效果图就是上面的那样!实现方式:上面是一个ViewPager实现的左右无限循环并带有自动轮播的banner.在banner图的下面是一个listview实现上拉加载的功能:但是在我实现的过程中我遇到了一个问题,就是整个页面的展示效果都已经实现,但是banner图连带下面的listview在上下滑动的时候出现卡顿的现象:当然之前也遇到了一个问题,就是我的banner图和listview一起放在了父控件ScrollView中,是的listview不能完全显示:那么就来解决这两个问题. 解决问题一:<

用两张图告诉你,为什么你的 App 会卡顿

Cover有什么料?从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么?知道Android究竟是如何在屏幕上显示我们期望的画面的?对Android的视图架构有整体把握.学会从根源处分析画面卡顿的原因.掌握如何编写一个流畅的App的技巧.从源码中学习Android的细想.收获两张自制图,帮助你理解Android的视图架构. link从setContentView()说起public class AnalyzeViewFrameworkActivity extends

面试必备】深入分析App卡顿原因及优化建议

从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? 知道Android究竟是如何在屏幕上显示我们期望的画面的? 对Android的视图架构有整体把握. 学会从根源处分析画面卡顿的原因. 掌握如何编写一个流畅的App的技巧. 从源码中学习Android的细想. 收获两张自制图,帮助你理解Android的视图架构.从setContentView()说起 public class AnalyzeViewFrameworkActivity extends Activity

解决webstorm拉取Vue项目时卡顿,及内存爆满问题

最近在拉取Vue项目时总是会出现webstorm内存瞬间爆满,导致webstorm卡死,而且,有时在下载完node_modues后webstorm一直处于updating中,为此在网上找了很多方法结果效果不怎么理想,然后自己就接着捣鼓,终于捣鼓出来了.下面就是方法: 1.打开webstorm,然后依照此路径(files->settings->editor->File Types->ignore files and folders)打开在其输入框中添加"node_modul

如何让vue项目兼容IE浏览器

一般来说项目开发到后期都需要做各种兼容性处理例如:360.IE9以上.QQ浏览器....等等 那么现在来介绍一个工具 babel-cli 跟 babel-preset-es2015 babel-cli 在项目中安装好这两个依赖 npm install -save babel-cli npm install --save-dev babel-preset-es2015 babel-cli 然后找到vue项目根目录下 .babelrc 原文地址:https://www.cnblogs.com/zho

rem的在vue项目中使用配置,,浏览器的兼容性之Mate标签

在vue中配置rem 位置:在APP.vue的script中,在export default之外 (()=>{ let winW = document.documentElement.clientWidth, desW = 1440, htmlFont = winW / desW * 100; window.htmlFont = htmlFont; document.documentElement.style.fontSize = htmlFont + 'px'; })() 浏览器的兼容性之Ma