В настоящее время я пытаюсь построить линейную диаграмму с использованием D3, которая загружает свои данные с сервера Elasticsearch и, когда почищается, повторно загружает данные в соответствии с новыми границами на x -ось. Это было реализовано, но поскольку код JavaScript загружает и повторно загружает данные с использованием запросов AJAX (через jQuery), старые запросы AJAX хранятся и их память не освобождается (как видно в инспекторе браузера). Это может быть из-за внутренних ссылок браузера на объекты XHR, создаваемые вызовами AJAX, но я не уверен. Ниже приведена одна из функций, выполняющих запрос (в конечном итоге она вызывает функцию обратного вызова minMaxLoaded, в которой выполняется выполнение, которое использует данные). Я пробовал много тактик, таких как сохранение вызовов AJAX в переменных и последующая установка их в null, .. но безрезультатно насколько я знаю, так как это все, завернутые в функции, ссылки на JavaScript должны исчезнуть после завершения функции и запросы должны быть мусора во всяком случае, здесь вы идете:AJAX призывает к экранированию объектов, вызвавших утечку памяти объектов XHR
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);
}
});
}
Спасибо за любую помощь!
Вы пытались вызывать 'abort()' для объекта ajax, возвращающегося из вызова '$ ajax', перед созданием нового (вместо того, чтобы просто установить ссылку на null)? – Val
Это ничего не меняет. Возможно ли, что сохранение ответов - это всего лишь функция веб-консоли Safari? Когда я закрываю веб-консоль, делаю несколько запросов и снова открываю их, ответы не уходят. – kgrimes2
Что заставляет вас думать, что есть утечки памяти? Вы проверили свою память и заметили, что она продолжает расти, или это просто чувство? Боюсь, во всех случаях это не так много связано с Elasticsearch. – Val