jquery - AJAX 调用可能导致站点内存泄漏

标签 jquery ajax json performance memory-leaks

我正在我的网站中使用一个进行 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/

相关文章:

javascript - 无法在 Twitter Bootstrap 模式中渲染表单?

JQuery UI 自动完成 - 按 Enter 键后隐藏列表

javascript - 通过 php 从文件输入 Javascript

javascript - 如何使用 arcGis JavaScript 获取地址的经纬度

java - 使用本地 JSON 文件存储数据的 Android 应用程序是否容易受到攻击?

json - 具有多个匹配项的 JMESPath JSON 过滤器

javascript - 添加事件监听器而不覆盖

javascript - .php 脚本的 Ajax 请求被取消

javascript - 使用ajax javascript将内容加载到网页中的div中

javascript - 如何始终获取 CSS 而不使用缓存副本?