Vue系列之常见内存泄漏定位与解决

本文探讨JavaScript中的内存泄漏问题,特别是针对Vue单页应用。内容包括内存泄漏的定义、判断方法(如Chrome的Heap Snapshot和Timeline分析),常见泄漏场景(如全局变量、定时器、DOM引用、事件绑定等)以及解决策略。实际案例中,通过检查和优化事件解绑、使用keep-alive等,有效解决了教师工作台应用的内存泄漏问题。
摘要由CSDN通过智能技术生成

JavaScript 有完善的内存处理机制,能自动进行垃圾回收,但是假如一个对象一直被引用,他的内存是无法得到释放的。如果项目运行过程中,内存占用越来越高,只增不减,没有峰值,就存在内存泄漏。多页应用我们可以通过页面刷新缓解,但是对于服务端渲染和单页应用则需要重点关注内存泄漏问题。本文主要以Vue单页应用展开,因为在 SPA 的设计中,用户使用它时是不需要刷新浏览器的,所以 JavaScript 应用需要自行清理组件来确保垃圾回收以预期的方式生效。

一、什么是内存泄漏

程序的运行需要内存。只要程序提出要求,操作系统或者运行时就必须供给内存。对于持续运行的服务进程,必须及时释放不再用到的内存。否则,内存占用越来越高,轻则影响系统性能,重则导致进程崩溃。不再用到的内存,没有及时释放,就叫做内存泄漏。

二、如何判断内存泄漏

Chrome 浏览器memory有3种方式,可以分析内存:

image.png

  1. Heap snapshot - 用以打印堆快照,堆快照文件显示页面的 javascript 对象和相关 DOM 节点之间的内存分配

  2. Allocation instrumentation on timeline - 在时间轴上记录内存信息,随着时间变化记录内存信息。

  3. Allocation sampling - 内存信息采样,使用采样的方法记录内存分配。此配置文件类型具有最小的性能开销,可用于长时间运行的操作。它提供了由 javascript 执行堆栈细分的良好近似值分配。

三、如何定位内存泄漏

点击快照-并hover右测的列表项,会显示部分存在内存泄漏的地方

image.png

四、常见的内存泄漏

  1. 意外的全局变量
    函数中意外的定义了全局变量,每次执行该函数都会生成

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值