gpt4 book ai didi

javascript - 我如何协助 IE 有缺陷的垃圾收集器?

转载 作者:行者123 更新时间:2023-11-29 10:23:18 25 4
gpt4 key购买 nike

我有一个 JavaScript 应用程序,它使用 XMLHttpRequest 来获取和解析大约 60,000 个 XML 文档。但是IE的内存占用增长很快,最终导致程序崩溃。我怀疑这与 IE 的 JScript GC 有关。下面是我的代码的简化版本:

在代码之上,我声明了两个变量:

var xmlhttp;
var xmlDoc;

当代码第一次开始运行时,我设置了xmlhttp的值:

xmlhttp = new XMLHttpRequest();

然后脚本进入主循环:

function loadXML() {

xmlhttp.abort();
xmlhttp.open("GET", url, false);
xmlhttp.setRequestHeader('Content-Type', 'text/xml', 'Pragma', 'no-cache');
xmlhttp.send("");
while (xmlhttp.readyState != 4) { }
xmlDoc = xmlhttp.responseXML;
setTimeout("readXML()",0);

}


function readXML() {

//Reads the XML.
//If all data has been retrieved, exit loop.
//Else, change the url and go back to loadXML()

}

谷歌浏览器运行代码很好,没有错误。但是,IE 在崩溃前循环了大约 2000 次,并出现“内存不足”错误。垃圾收集器不做它的工作吗?我可以重写我的代码以防止出现问题吗?

最佳答案

您根本不应该使用繁忙的循环来等待 XMLHttpRequest 的结果。此外,没有理由将 xmlhttp 对象公开。相反,在每次调用时创建一个新回调并注册一个回调:

function loadXML() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", url, false);
xmlhttp.setRequestHeader('Content-Type', 'text/xml', 'Pragma', 'no-cache');
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
xmlDoc = xmlhttp.responseXML;
readXML();
}
};
xmlhttp.send("");
}

关于javascript - 我如何协助 IE 有缺陷的垃圾收集器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7134922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com