【发布时间】:2016-09-02 05:51:38
【问题描述】:
如何避免 XHR POST 内存泄漏?我浏览了很多关于 XHR 内存泄漏的网页,但没有好的解决方案。我的问题几乎与this 类似,该博客解释了问题但没有解决方案。
我的问题: 我有一个网络应用程序,它不断向服务器发送日期(2Mb 到 80Mb),它会发出 10 到 300 个请求。这是 POST 请求。对于 GET 请求,这样的问题不大。
我该如何解决这个问题? 循环参考,范围,更接近等我尝试但没有成功。 我尝试使用 delete 关键字进行就绪状态更改,删除以前的 xhr 对象,尝试重用 xhr,xhr 对 null 的引用,更改编码模式等
这是示例代码。这是我需要的功能
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 ();
我怎样才能在没有内存泄漏的情况下做到这一点?
【问题讨论】:
-
我看不出你想用那个看起来很奇怪的 sendRequest 函数来实现什么 - 从来没有见过有人这样做 - 你认为它的目的是什么? - 或者数组,只有一个元素……都是奇怪的代码,看起来像是为了引起问题而设计的
-
目的是测量连接的上传速度
-
好吧,它不会做这样的事情 - 不确定它是否会导致错误或继续重复发送数据......哦,我明白了,它应该发送然后完成后发送再次,无限
-
我也试试 if(Self.xhr.readyState == 4 && Self.xhr.status == 200){} 没有变化!
-
所以这个函数会在前一个请求完成后重复发送一个大的 POST 请求......你想知道内存泄漏在哪里......
标签: javascript ajax memory-leaks