Javascript Internet Explorer内存泄漏

Javascript Internet Explorer内存泄漏,javascript,memory-leaks,internet-explorer-11,Javascript,Memory Leaks,Internet Explorer 11,我有一个用react编写的webapp,它发送ajax请求来接收一个文档的5页块。为此,请求本身递归调用其函数,作为接收接下来5页的超时 附加信息:我使用npm存储库中的官方流量。 以下代码示例: function getPages() { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function () { if (this.readyState === 4 &&

我有一个用react编写的webapp,它发送ajax请求来接收一个文档的5页块。为此,请求本身递归调用其函数,作为接收接下来5页的超时

附加信息:我使用npm存储库中的官方流量。 以下代码示例:

function getPages() {

    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function () {
        if (this.readyState === 4 && this.status === 200) {
            var resp = JSON.parse(this.responseText);
            SwitchViewAction.addPages(resp); // calls another setTimeout later,
                                             // because of react lifecycle

            if (Object.keys(resp).length > 0) {
                setTimeout(getPages(), 0);
            }
        }
    };

    xhttp.open("GET", '/GetDocumentPages/', true);
    xhttp.send();
}
问题是,IE 11为每个请求(或超时?)分配了近20MB的内存。如果我呈现一个约250页的文档,IE内存不足,我会出现以下错误:

Not enough storage is available to complete this operation.

我发现,这解释了setTimeout设置了一个内部引用,所以超时永远不会被删除。但仅对于IE而言,超时语法不正确,您应该这样称呼它:

setTimeout(getPages, 0);

否则,您会立即调用该函数,并且确实会耗尽内存,因为以前函数调用的状态永远不会被垃圾回收。

超时语法不正确,您应该这样调用它:

setTimeout(getPages, 0);

否则,您会立即调用该函数,并且确实会耗尽内存,因为以前函数调用的状态永远不会被垃圾收集。

问题是IE在将base64字符串呈现为图像时会浪费内存。我的解决方案是只渲染一堆页面,而不是整个文档。

问题是IE在将base64字符串渲染为图像时会浪费内存。我的解决方案是只渲染一堆页面,而不是整个文档。

先读这个:先读这个:谢谢,但不幸的是,这没有帮助。目前看来,这似乎是个问题。渲染时,内存会爆炸。其他浏览器,如chrome和firefox,也可以处理这个问题。我正在继续搜索。谢谢你,但不幸的是,这没有帮助。目前看来,这似乎是个问题。渲染时,内存会爆炸。其他浏览器,如chrome和firefox,也可以处理这个问题。我要继续找。