网站首页 > 博客文章 正文
最近做的项目一直有个卡顿问题没有解决,场景是vue单页面项目中使用echart图表+百度地图,如果不进入这些内容页面,项目正常运行,一旦进入后,内存暴增,且切换后依然没被释放,找各种方式解决问题,有必要记录一下问题的原因和他人的解决方案,并进行拓展学习。我后续会将自己的解决方案发出来,并更新到博客。
也期待各位大牛讨论指点。
1. 监听在window/body等事件没有解绑
2. 绑在EventBus的事件没有解绑
3. 模块形成的闭包内部变量使用完后没有置成null
4. 使用第三方库创建,没有调用正确的销毁函数
5 . echarts问题: 不要把chart实例赋值在this上。
(this对象一直存在不会被回收)析构掉生成的echarts对象。
//-dom 不存在时不画
if (!this.$refs.barchart) {return}
//- 不要重复初始化
let Chart = echarts.getInstanceByDom(this.$refs.barchart)
if (!Chart) {Chart = echarts.init(this.$refs.barchart, 'light')}
//-释放echarts对象beforeDestroy () {
let dcharts = echarts.getInstanceByDom(this.$refs.barchart)if (dcharts{echarts.dispose(dcharts)}},
6. keep-alive 的 include 里存的其实是一个 vuex 中的一个数据源(数据源保存的是路由名称),当关闭标签页时,这个数据源中的一项会被移除。这之前,我们在组件里监听到这个数据源的变化,如果此组件对应的路由(这个路由应在 mounted 的时候保存下来)已经不在数据源中了,那就应该销毁此组件。this.$destroy("组件名,es6写法就是class类名") 这一步在新的架构里面已经做了
7. setTimeout setInterval清理 (最好不用)可以使用nextTick代替
8. 数据量多引起的内存占用严重,减少数据, 简化vue实例对象的数据量,减少内存开销
9 . vue是单页面,页面路由切换后,内存未释放
10 . 如果在mounted/created 钩子中使用了$on,需要在beforeDestroy 中做对应解绑($off)处理
11. 如果在mounted/created 钩子中绑定了DOM/BOM 对象中的事件,需要在beforeDestroy 中做对应解绑处理
12. 如果在mounted/created 钩子中使用了第三方库初始化,需要在beforeDestroy 中做对应销毁处理
13. Vue官网讲解避免内存泄露 https://cn.vuejs.org/v2/cookbook/avoiding-memory-leaks.html (我们erp没有 Choices.js库,所以不存在)
14 闭包导致,比如事件处理回调,导致DOM对象和脚本中对象双向引用,这个是常见的泄漏原因
16 js实例 用完 未被清理
17 JavaScript 内存泄露 : 1.意外的全局变量 2.被遗忘的计时器或回调函数 3.脱离 DOM 的引用 4.闭包
- 上一篇: Vue3 PC端页面开发规范
- 下一篇: vue本页面调用其他页面方法
猜你喜欢
- 2024-11-23 uni-app使用经验—vue页面和html页面如何互相调用接口并传参
- 2024-11-23 vite还没发release版就已经火得不行了
- 2024-11-23 记一次系统演变过程
- 2024-11-23 「融职培训」Web前端学习 第7章 Vue基础教程10 路由
- 2024-11-23 39、Vue-router 是干什么的,原理是什么?(必会)
- 2024-11-23 vue3-使用 Vue 的多种方式
- 2024-11-23 Vue全家桶-使用总结
- 2024-11-23 前端笔记-vuex
- 2024-11-23 vue的理解-vue源码 历史 简介 核心特性 和jquery区别 和 react对比
- 2024-11-23 Vue.js—实现前后端分离架构中前端页面搭建(二)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)