首页 > 解决方案 > XMLHttpRequest send() 方法上的内存泄漏

问题描述

我正在尝试将带有 XMLHttpRequest 的文件发送到 Flask 服务器。基本上这就是我所做的:

<!-- this is the HTML input element -->
<input name="file" type="file" onchange="sendBlob(this.files[0])" multiple>

function sendBlob(file)
{
    var chunkSize = 500000000; // 500 MB

    var xhr = new XMLHttpRequest();

    var blob = file.slice(0, chunkSize, "application/octet-stream");

    xhr.open("POST", "http://127.0.0.1:5000/api/get_layout/");

    xhr.onreadystatechange = function()
    {
        if (this.readyState == 4 && this.status == 200)
            console.log("blob successfully sent.");
    }

    xhr.setRequestHeader("Content-Type", "application/octet-stream");
    xhr.setRequestHeader("X-Content-Name", "blob");

    xhr.send(blob);
}

xhr.send() 之前的内存状态

这个函数实际上有效并且成功地将文件发送到服务器,但是它增加了 RAM 内存而不释放它。特别是,它正好增长了 500 MB,这是我发送的 blob 的大小。

xhr.send() 之后的内存状态

问题可能是什么?我已经知道 Javascript 有一个垃圾收集器,但它似乎在请求完成后不会收集 xhr 对象(即服务器返回 200 状态代码)。

如果我在这个过程之后关闭我的网络浏览器,内存就会被释放。我不明白为什么会这样。

谢谢

标签: javascriptajaxxmlhttprequest

解决方案


推荐阅读