javascript - XMLHttp POST 请求的巨大内存泄漏

标签 javascript ajax memory-leaks

如何避免 XHR POST 内存泄漏?我浏览了很多关于 XHR 内存泄漏的网页,但没有好的解决方案。我的问题和 this 的博客差不多,有说明问题但没有解决方案。

我的问题: 我有一个网络应用程序,它不断向服务器发送日期(2Mb 到 80Mb),它会发出 10 到 300 个请求。它是 POST 请求。对于 GET 请求没有这样的大问题。

我该如何解决这个问题? 循环引用、范围、更接近等我尝试但没有成功。 我尝试使用 delete 关键字来更改 readystate,删除以前的 xhr 对象,尝试重用 xhr,对 null 的 xhr 引用,更改编码模式等

这是示例代码。这是我需要的功能

 var base_string =  "ABCDEFGHIJKLMNOPQUST01234567890!@#$%^&:ABCDEFGHIJKLMNOPQUST01234567890!@#$%^&ABCDEFGHIJKLMNOPQUST01234567890!@#$%^&";
            base_string += base_string;  
            base_string += base_string; 
            base_string += base_string; 
            base_string += base_string;  
            base_string += base_string;  
            base_string += base_string;  
            base_string += base_string;  
            base_string += base_string; 
            base_string += base_string;  
            base_string += base_string;  
            base_string += base_string; 
            base_string += base_string;  
            base_string += base_string;  
            base_string += base_string;  
            base_string += base_string;  
            base_string += base_string;  
            base_string += base_string;  
            this.sampleData = base_string;
            var dataToSend = this.sampleData.substring( 0, 2000000 );



           this.xhr = [];
           this.xhr[0] = new XMLHttpRequest();
           function sendRequest (){
               var Self = this;
               Self.xhr[0].onload = function (test) {
                   sendRequest ();
               };

               Self.xhr[0].open("POST", "http://localhost/upload.php" + "?n=" +  Math.random(), true);
               Self.xhr[0].send(dataToSend);
           }
           sendRequest ();

如何在没有内存泄漏的情况下完成此操作?

最佳答案

清理你的代码 - 这应该做同样的事情而不奇怪和毫无意义地使用 Self 和数组......它还会重新初始化 xhr

我已经更改为向上传加载事件添加一个监听器 - 这里的快速测试似乎没有泄漏(似乎)

// snip
this.sampleData = base_string;
var dataToSend = this.sampleData.substring( 0, 2000000 );

function sendRequest (){
    var xhr = new XMLHttpRequest();
    xhr.upload.addEventListener('load', function (e) {
        sendRequest ();
    });

    xhr.open("POST", "http://localhost/upload.php" + "?n=" +  Math.random(), true);
    xhr.send(dataToSend);
}
sendRequest ();

关于javascript - XMLHttp POST 请求的巨大内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39285158/

相关文章:

javascript - Vuejs 条件渲染的简写

ajax - 使用 Express 检测 NodeJS 上的 AJAX 请求

android - 我如何知道在任何给定时刻我有多少堆内存?

c++ - SDL 2.0 内存泄漏

Ajax 爬行 : old way vs new way (#! )

c++ - 使用 shared_ptr 时内存泄漏

javascript - "...this.props"在 ReactJS 中是什么意思?

javascript - 是否可以使用 for 循环编辑多个数组?

javascript - 使用变量在 jQuery 中设置 css 属性值

仅当元素存在时 Ajax 渲染