我目前正在尝试使用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);
}
});
}
感谢您的帮助!
答案 0 :(得分:0)
似乎Safari Web控制台会跟踪其打开时所做的响应。处理时间减慢的原因是因为这个原因。如果Web控制台已关闭,则问题就消失了。