Утечка памяти Flot при связывании двух графиков с использованием панорамирования - PullRequest
5 голосов
/ 25 октября 2011

мы рендерим два графика с помощью flot, которые имеют одинаковую ось X. мы наносим на них:

plot1 = $.plot($("#placeholderGraph1"), p1_data, d1_options);
plot2 = $.plot($("#placeholderGraph2"), p2_data, d2_options);

нам нужно убедиться, что панорамирование и масштабирование на одном графике также перерисовывают другой, и наоборот. мы достигаем этого с помощью следующего связывания:

$("#placeholderGraph1").bind("plotpan", adjustGraph1Axes);
$("#placeholderGraph2").bind("plotpan", adjustGraph2Axes);

Если мы не добавим эти два последних утверждения, утечки памяти не будет, и браузер (все браузеры) удаляет память всякий раз, когда перерисовывает. Но благодаря вышеуказанной привязке браузер никогда не сбрасывает память и накапливает сотни мегабайт.

Помимо этого, мы также обновляем отдельные легенды движениями мыши.

мы пробовали следующие подходы для утечки памяти, но ни один не работал:
1. создание глобальных переменных plot1 и plot2 и явное удаление содержимого
2. Удаление графа div и воссоздание
3. Явно отменяющий привязку событий перед повторным связыванием
4. Построение пустого графика перед перерисовкой

Есть ли другие подходы к сопоставлению двух графов или сбросу памяти?

Ответы [ 2 ]

0 голосов
/ 04 апреля 2015

Возможно, у меня была похожая проблема, связанная с синхронизацией выделения на обзорном графике и панорамированием / масштабированием на основном графике;моя проблема заключалась в том, что обработчик событий для одного графика вызывал событие для другого графика, а выполнение соответствующего обработчика событий вызывало событие для первого графика, что приводило к выполнению исходного обработчика событий ... что приводило к бесконечностиloop.

Другими словами, вы уверены, что ваша проблема не в том, что выполнение adjustGraph1Axes не вызывает событие plotpan для графика 2, которое вызывает непреднамеренное выполнение adjustGraph2Axes, чтовызвать plotpan для графика 1 и вызвать выполнение adjustGraph1Axes и так далее?Мой пост вместе с решением находится здесь: Событие Flot для обновления диапазона в ответ на панорамирование / масштабирование .

Я использовал флаг для решения проблемы пинг-понга между двумя обработчиками событийи мое решение в <<a href="http://jsfiddle.net/apandit/nu2rr58h/12/" rel="nofollow noreferrer">http://jsfiddle.net/apandit/nu2rr58h/12/>.

0 голосов
/ 05 октября 2014

Возможно, проблема связана с плагином Flot: jquery.flot.navigate.js.

Я предлагаю вам обновить JQuery до версии 1.5 вместе с плагином flot, упомянутым выше.

Возможно, вы захотите перейти по этой ссылке (см .: ChangeLog в вашу правую сторону):

https://code.google.com/p/flot/source/browse/trunk/jquery.flot.navigate.js?r=317

...