Vue优化:常见会导致内存泄漏问题及优化

本文深入探讨Vue应用中常见的内存泄漏问题,包括事件监听未解绑、第三方库资源未释放、echarts图表管理不当等场景,并提供解决方案,帮助开发者有效避免和解决内存泄漏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 监听在window/body等事件没有解绑

  2. 绑在EventBus的事件没有解绑

  3. 模块形成的闭包内部变量使用完后没有置成null

  4. 使用第三方库创建,没有调用正确的销毁函数

  5. echarts问题:
    不要把chart实例赋值在this上。(this对象一直存在不会被回收)
    析构掉生成的echarts对象。
    //-dom 不存在时不画
    if (!this.refs.barchart)return//−不要重复初始化letChart=echarts.getInstanceByDom(this.refs.barchart) { return } //- 不要重复初始化 let Chart = echarts.getInstanceByDom(this.refs.barchart)return//letChart=echarts.getInstanceByDom(this.refs.barchart)
    if (!Chart) {
    Chart = echarts.init(this.KaTeX parse error: Expected 'EOF', got '}' at position 25: …hart, 'light') }̲ //-释放echarts对象…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中做对应解绑(on,需要在beforeDestroy 中做对应解绑(onbeforeDestroy(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对象和脚本中对象双向引用,这个时常见的泄漏原因

  15. js实例 用完 未被清理

  16. JavaScript 内存泄露 : 1.意外的全局变量 2.被遗忘的计时器或回调函数 3.脱离 DOM 的引用 4.闭包

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值