AJAX 调用 Elasticsearch 导致 XHR 对象内存泄漏

AJAX Calls to Elasticsearch Causing Memory Leak of XHR Objects

我目前正在尝试使用 D3 构建折线图,该折线图从 Elasticsearch 服务器加载数据,并在刷新时根据 x 轴上的新边界重新加载数据。这已经实现,但是随着 JavaScript 代码使用 AJAX 请求(通过 jQuery)加载和重新加载数据,旧的 AJAX 请求将保留下来,它们的内存没有被释放(在浏览器检查器中可以看到)。这可能是因为浏览器对 AJAX 调用生成的 XHR 对象的内部引用,但我不确定。下面是执行查询的函数之一(它最终调用 "minMaxLoaded" 回调函数,其中使用数据继续执行。我尝试了很多策略,例如将 AJAX 调用存储在变量中和后来将它们设置为 null,但无济于事。据我所知,由于这一切都包含在一个函数中,因此 JavaScript 引用应该在函数完成后消失并且请求应该被垃圾收集。无论如何,在这里你去:

function queryMinMax(domain, index) {
    var absMin;
    var absMax;

    var minmaxQuery = {
        "aggregations" : {
            "minTime" : {
                "top_hits" : {
                    "size" : 1,
                    "sort" : [ { "timestamp" : { "order" : "asc" } } ]
                }
            },
            "maxTime" : {
                "top_hits" : {
                    "size" : 1,
                    "sort" : [ { "timestamp" : { "order" : "desc" } } ]
                }
            }
        }
    };

    $.ajax({
        url: domain + index + "/_search?search_type=count",
        type: "POST",
        dataType: "json",
        data: JSON.stringify(minmaxQuery),

        success: function(response) {
            absMin = parseDate(response.aggregations.minTime.hits.hits[0]._source["timestamp"]).getTime();
            absMax = parseDate(response.aggregations.maxTime.hits.hits[0]._source["timestamp"]).getTime();
            minMaxLoaded(absMin, absMax);
        }
    });
}

感谢您的帮助!

Safari Web 控制台似乎会跟踪打开时所做的响应。处理时间减慢这么多的原因是因为这个。如果关闭 Web 控制台,问题就消失了。