サイトで AJAX 呼び出しを行う関数を使用しています。JSONP を使用してドメイン全体に到達し、必要なデータを取得しながら、JavaScript 関数でラップされた JSON 文字列を返します。JSON 文字列は非常に大きく、サイズは約 1MB です。私が抱えている問題は、呼び出しごとにメモリのサイズが約 1MB 大きくなることです。何が起こるかというと、IE9 では、「メモリ不足」というエラーが表示されます。これを防ぐにはどうすればよいですか?
これは、メモリ タイムラインを使用して Chrome で撮影した時間の経過に伴うメモリ使用量の写真です。
私が受け取ったJSONデータの各コールバック関数で、それが完全に置き換えられるのではなく、DOM内にスタックされている場合、私は興味がありますか? 最初にDOMから古いコールバック関数のJSONデータを削除してから、APIを呼び出してJSONデータで満たされた新しいコールバック関数を取得する方法はありますか?
HTML 内から次のコマンドを使用して関数を起動します。
setTimeout(grabParature, 10000);
呼び出される関数は次のとおりです (トークンは明らかな理由で省略されています)。
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;
}
});
};