3

サイトで 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;
    }
});

};
4

1 に答える 1

0

私は問題を理解しました。関数から次の行を削除しました。

console.log(results);

現在、ウェブサイトは投稿された写真のようにメモリを消費していません。メモリ タイムラインには、予想どおり鋸歯状のグラフが多く含まれています。

于 2013-08-13T17:11:48.633 に答える