我正在我的网站中使用一个进行 AJAX 调用的函数。它返回一个封装在 JavaScript 函数中的 JSON 字符串,同时使用 JSONP 跨域获取我需要的数据。 JSON 字符串非常大,大小约为 1MB。我遇到的问题是,我注意到每次调用我的内存都会增加约 1MB。发生的情况是,在 IE9 中超时,我收到一条错误,指出“内存不足”。我该如何防止这种情况发生?
Here is a picture of the memory usage over time that I took with Chrome using the Memory Timeline.
我很好奇我收到的 JSON 数据的每个回调函数是否堆叠在 DOM 中,而不是完全替换?有没有办法确保我先从 DOM 中删除旧的回调函数 JSON 数据,然后调用 API 来获取填充 JSON 数据的新回调函数?
我在 HTML 中使用以下命令启动该函数:
setTimeout(grabParature, 10000);
这是被调用的函数(由于明显的原因省略了 token ):
function grabParature() {
var url = "https://s3.parature.com/api/v1/5406/5426/Ticket";
$.ajax({
url: url,
type: "GET",
dataType: "jsonp",
cache: true,
jsonp : "_callback_=",
jsonpCallback: "theData",
data: {
"_status_type_": "open",
"_pageSize_" : "500",
"_output_" : "javascript",
"_token_" : "#####################"
},
success: function (results) {
var openTickets = 0;
var newTickets = 0;
var atschoolTickets = 0;
var hardwareTickets = 0;
var softwareTickets = 0;
var networkTickets = 0;
console.log(results);
for(var i = 0; i < results.Entities.Ticket.length; i++)
{
var queue = "";
var status = results.Entities.Ticket[i].Ticket_Status.Status.Name["#text"];
if (results.Entities.Ticket[i].Ticket_Queue != undefined) {
queue = results.Entities.Ticket[i].Ticket_Queue.Queue.Name["#text"];
}
if (status === "Open") {
openTickets++;
}
else if (status === "New") {
newTickets++;
}
if (queue === "Hardware") {
hardwaretickets++;
}
else if (queue === "Atschool") {
atschoolTickets++;
}
else if (queue === "Network") {
networkTickets++;
}
else if (queue === "Software") {
softwareTickets++;
}
}
$('#span_openTickets').html(openTickets);
$('#span_newTickets').html(newTickets);
$('#span_hardwareTickets').html(hardwareTickets);
$('#span_atschoolTickets').html(atschoolTickets);
$('#span_networkTickets').html(networkTickets);
$('#span_softwareTickets').html(softwareTickets);
results = null;
}
});
};
最佳答案
我发现了问题所在。我从函数中删除了以下行:
console.log(results);
现在网站不再像发布的图片中那样消耗内存。正如预期的那样,内存时间线有更多的锯齿图。
关于jquery - AJAX 调用可能导致站点内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18212499/