Javascript Internet Explorer内存泄漏
我有一个用react编写的webapp,它发送ajax请求来接收一个文档的5页块。为此,请求本身递归调用其函数,作为接收接下来5页的超时 附加信息:我使用npm存储库中的官方流量。 以下代码示例: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 &&
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,也可以处理这个问题。我要继续找。