axios 内存泄漏

Posted 你的好邻居

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了axios 内存泄漏相关的知识,希望对你有一定的参考价值。

  有一个项目需要post后台几万条数据,每次只能请求三五条,所以只能在每次请求成功后自调用这个请求函数。

  但这样请求了成千上万次后,浏览器会崩溃并报出 out of Memory 错误,经查询,这是内存泄漏错误。由于axios每次请求都会创建一个promise实例,而在请求完之后也没有释放,长此以往,浏览器内存不够就会崩溃。

  查找了一些数据后,我发现 axios 浏览器内存泄露问题解决 这个博客中提供了解决axios内存泄漏的方法。其中退版本至0.19.2,经测试,在我这里并不管用。另一种方法,代码是ts的,我没看懂,但主要思想是创建一个axios实例,在请求之后手动释放这个实例。于是我对代码做了修改,在请求之前创建实例,用此实例做请求,之后释放实例。

  在这个过程中还碰到一个问题,之前我是用 const axios = axios.create 作为创建实例的方法,但是由于 const 代表常量,之后再用axios = null的方法释放就会报错,所以改用 let;

  实例名若与 axios 相同的话,也会报错,找不到 create 方法,此时再看 import 引用进 axios 的语句会发现 axios 没有使用。所以实例名不能与 axios 重名。 

 

修改后代码如下所示:

 postSelf() {
      let item = {};
      let url = this.Api;

      // 创建axios实例解决内存泄漏
      let axis = axios.create();
      axis
        .post(url, item)
        .then((res) => {
            let data = res.data;
            if (data.status == 1) {
            // 循环自调用
              this.postSelf();
            } else {})
        .catch((err) => {});
      // 释放内存
      axis = null;
    },                

 

以上是关于axios 内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

避免android片段中内存泄漏的最佳方法是啥

FragmentStatePagerAdapter 内存泄漏(带有 viewpager 的嵌套片段)

带有 UI 和内存泄漏的保留片段

在片段中保存活动实例:是否会导致内存泄漏?

片段 - 全局视图变量与本地和内部类侦听器和内存泄漏

iPhone内存泄漏问题?