如何在JavaScript中释放XMLHttpRequest的内存?

时间:2018-08-16 06:24:55

标签: javascript html html5 performance javascript-objects

我正在使用XMLHttpRequest下载大小为750mb的文件作为arraybuffer。 问题在于,下载文件后,即使删除XMLHttpRequest对象,内存也不会释放给操作系统。 我的示例代码是

<!DOCTYPE html>
<html>
<body>

<div id="demo">
<button type="button" onclick="loadXMLDoc()">load the file</button>
<button type="button" onclick="clear()">clear</button>
</div>

<script>
var xhttp = null;
function loadXMLDoc() {
    if(xhttp == null)
        xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      console.log(xhttp.response);
      delete xhttp;
      xhttp = null;

    }
  };
    xhttp.open("GET", "http://192.168.1.104/gltf/bmw/buffer.bin", true); //buffer.bin is 750 mb

    xhttp.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
    xhttp.responseType = 'arraybuffer';
    xhttp.send();
}

function clear()
{
    delete xhttp;
    xhttp = null;


}

</script>

</body>
</html>

1)这是删除XMLHttpRequest对象的正确方法吗? 2)如何使XMLHttpRequest将内存释放回os? enter image description here

谢谢

2 个答案:

答案 0 :(得分:0)

不完全是。 delete <variable name>甚至看起来令人困惑(我很惊讶它可以正常运行而不会抛出错误)。 <variable> = null通常是正确的方法。但是,在您的情况下,它不会有所作为。

JS实现了自己的memory management。一旦相关变量未被其他人使用,垃圾收集器将释放内存。

问题是Garabge Collector没有连续运行。而是不时地调用它。尝试在开发人员工具中单击“收集垃圾”按钮。这将立即调用GC。 Developer Tools - initiate garbage collecting

这不是一种解决方案,而是一种调查内存是否可以释放的方法,或者由于从某个地方引用您的数据而无法释放内存的方法。

答案 1 :(得分:0)

我发现问题出在“ console.log()”。如果我在console.log行中注释掉,则内存将释放回操作系统。