Утечка памяти Flot при связывании двух графиков с использованием панорамирования

Мы рендерим два графика с помощью 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 ответа

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

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

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

Возможно, проблема связана с плагином 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

Другие вопросы по тегам