我在我的网站中使用了一个进行AJAX调用的函数。它返回一个包含在javascript函数中的JSON字符串,同时使用JSONP跨域访问以获取我需要的数据。 JSON字符串非常大,大小约为1MB。我遇到的问题是,每次通话都会注意到我的内存大小约为1MB。会发生什么事情是加班,在IE9中,我得到一个错误声明它是'Out Of Memory'。我该如何防止这种情况发生?
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;
}
});
};
答案 0 :(得分:0)
我弄明白了这个问题。我从我的函数中删除了以下行:
console.log(results);
现在网站没有像发布的图片那样消耗内存。内存时间轴更像是预期的锯齿图。