如何避免 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 (); 


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!