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 控制台,问题就消失了。
我目前正在尝试使用 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 控制台,问题就消失了。