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 内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章