Jquery 与AJAX相关的内存泄漏
我正在使用jQuery 3.1.0和UWamp 3.1.0来运行这个脚本 我想创建一个可以连接到服务器的脚本,以便执行一系列重复任务;该服务器不属于我的域 我将仅从AJAX调用开始发布代码,因为我认为它们是导致泄漏的原因 第一部分连接到一个预先计算的链接,并下载一个要连接的其他链接列表(解析器只返回给定URL的内容) 响应总是包含多个链接,我需要连接到第一个链接,再执行几个调用,然后才能继续第二个链接,然后是第三个链接,以此类推。Jquery 与AJAX相关的内存泄漏,jquery,ajax,memory-leaks,Jquery,Ajax,Memory Leaks,我正在使用jQuery 3.1.0和UWamp 3.1.0来运行这个脚本 我想创建一个可以连接到服务器的脚本,以便执行一系列重复任务;该服务器不属于我的域 我将仅从AJAX调用开始发布代码,因为我认为它们是导致泄漏的原因 第一部分连接到一个预先计算的链接,并下载一个要连接的其他链接列表(解析器只返回给定URL的内容) 响应总是包含多个链接,我需要连接到第一个链接,再执行几个调用,然后才能继续第二个链接,然后是第三个链接,以此类推。 链接存储在数组URL中 // Connects to t
链接存储在数组URL中
// Connects to the first link in the list
console.log("Request to: " + urls[0]);
urls[0] = $.post("php/parser.php",
{
url: urls[0]
},
function(res, state) {
console.log(0 + ": completed");
}
);
for(var y = 0; y < urls.length;/*y++*/) {
$.when(urls[y]).done(function(res) {
// Other calls here
console.log("Doing stuff");
// Continuing with the next link
y++;
if(y < urls.length) {
console.log("Request to: " + urls[y]);
urls[y] = $.post("php/parser.php",
{
url: urls[y]
},
function(res, state) {
console.log(y + ": completed");
}
);
}
}, function(res) {});
}
});
//连接到列表中的第一个链接
log(“请求:+URL[0]);
URL[0]=$.post(“php/parser.php”,
{
url:url[0]
},
功能(res、state){
控制台日志(0+“:已完成”);
}
);
对于(变量y=0;y
现在:
在Chrome/IE上,只会执行前两个调用,因为$when(URL[y]).done()永远不会被触发,因为URL[0]。state()始终等于pending
在Firefox上,如果我调试代码,一切都会顺利运行(垃圾邮件按f10键进入下一条指令会带来6秒的执行时间),而如果我让代码自己运行,就会出现一些问题,从console.log()不显示消息到浏览器每秒占用数百兆内存(虽然进展非常缓慢),但大约30秒后会导致浏览器崩溃。更精确一点的数据,取自任务管理器;当不执行脚本时,Firefox使用480MB内存:
调试->在6s内最多500 MB的RAM
在30秒内运行->高达7GB的RAM
(我打开了很多其他选项卡,如果有任何变化的话) 我对js/jQuery/php完全是个新手,上网并没有帮我找到任何解决方案;如果有经验多一点的人能花点时间研究一下,我将不胜感激。提前感谢 编辑:我通过同步所有调用解决了这个问题,但我仍然对查找泄漏发生的原因感兴趣
// Connects to the first link in the list
console.log("Request to: " + urls[0]);
urls[0] = $.post("php/parser.php",
{
url: urls[0]
},
function(res, state) {
console.log(0 + ": completed");
}
);
for(var y = 0; y < urls.length;/*y++*/) {
$.when(urls[y]).done(function(res) {
// Other calls here
console.log("Doing stuff");
// Continuing with the next link
y++;
if(y < urls.length) {
console.log("Request to: " + urls[y]);
urls[y] = $.post("php/parser.php",
{
url: urls[y]
},
function(res, state) {
console.log(y + ": completed");
}
);
}
}, function(res) {});
}
});