fix jqplot memory leak (#133)

This commit is contained in:
Tristian 2017-06-22 07:43:35 -04:00 committed by Tanguy Pruvot
parent 87f89c9a4f
commit 44ba719477

View file

@ -51,6 +51,7 @@ echo <<<end
<script type="text/javascript"> <script type="text/javascript">
var last_graph_update, graph_need_update, graph_timeout = 0; var last_graph_update, graph_need_update, graph_timeout = 0;
var price_graph, balance_graph = '';
function graph_refresh() function graph_refresh()
{ {
@ -81,8 +82,14 @@ function graph_resized()
function graph_price_data(data) function graph_price_data(data)
{ {
if (price_graph)
{
$('#graph_history_price *').unbind();
price_graph.destroy();
}
var t = $.parseJSON(data); var t = $.parseJSON(data);
var graph = $.jqplot('graph_history_price', t.data, price_graph = $.jqplot('graph_history_price', t.data,
{ {
title: '<b>Price history</b>', title: '<b>Price history</b>',
animate: false, animateReplot: false, animate: false, animateReplot: false,
@ -138,9 +145,9 @@ function graph_price_data(data)
} }
}); });
// limit visible axis ticks // limit visible axis ticks
var x2ticks = graph.axes.x2axis._ticks; var x2ticks = price_graph.axes.x2axis._ticks;
graph.axes.xaxis.ticks = []; price_graph.axes.xaxis.ticks = [];
var tickInterval = graph.grid._width > 0 ? Math.round(90*300 / graph.grid._width, 0) : 1; var tickInterval = price_graph.grid._width > 0 ? Math.round(90*300 / price_graph.grid._width, 0) : 1;
var label, day, lastDay; var label, day, lastDay;
for (var i=0; i < x2ticks.length; i++) { for (var i=0; i < x2ticks.length; i++) {
if (i % tickInterval == 0) { if (i % tickInterval == 0) {
@ -149,18 +156,24 @@ function graph_price_data(data)
if (x2ticks.length > 500 && day == lastDay) label = ''; if (x2ticks.length > 500 && day == lastDay) label = '';
else label = (day == lastDay) ? $.jsDate.strftime(dt, '%H:%M') : day; else label = (day == lastDay) ? $.jsDate.strftime(dt, '%H:%M') : day;
lastDay = day; lastDay = day;
graph.axes.xaxis.ticks.push([x2ticks[i].value, label]); price_graph.axes.xaxis.ticks.push([x2ticks[i].value, label]);
} }
} }
graph.axes.xaxis.ticks.push([x2ticks[x2ticks.length-1].value, '']); price_graph.axes.xaxis.ticks.push([x2ticks[x2ticks.length-1].value, '']);
graph.replot(false); price_graph.replot(false);
graph = x2ticks = null; x2ticks = null;
} }
function graph_balance_data(data) function graph_balance_data(data)
{ {
if (balance_graph)
{
$('#graph_history_balance *').unbind();
balance_graph.destroy();
}
var t = $.parseJSON(data); var t = $.parseJSON(data);
var graph = $.jqplot('graph_history_balance', t.data, balance_graph = $.jqplot('graph_history_balance', t.data,
{ {
title: '<b>Balances</b>', title: '<b>Balances</b>',
animate: false, animateReplot: false, animate: false, animateReplot: false,
@ -219,9 +232,9 @@ function graph_balance_data(data)
} }
}); });
// limit visible axis ticks // limit visible axis ticks
var x2ticks = graph.axes.x2axis._ticks; var x2ticks = balance_graph.axes.x2axis._ticks;
graph.axes.xaxis.ticks = []; balance_graph.axes.xaxis.ticks = [];
var tickInterval = graph.grid._width > 0 ? Math.round(90*300 / graph.grid._width, 0) : 1; var tickInterval = balance_graph.grid._width > 0 ? Math.round(90*300 / balance_graph.grid._width, 0) : 1;
var label, day, lastDay; var label, day, lastDay;
for (var i=0; i < x2ticks.length; i++) { for (var i=0; i < x2ticks.length; i++) {
if (i % tickInterval == 0) { if (i % tickInterval == 0) {
@ -230,12 +243,12 @@ function graph_balance_data(data)
if (x2ticks.length > 500 && day == lastDay) label = ''; if (x2ticks.length > 500 && day == lastDay) label = '';
else label = (day == lastDay) ? $.jsDate.strftime(dt, '%H:%M') : day; else label = (day == lastDay) ? $.jsDate.strftime(dt, '%H:%M') : day;
lastDay = day; lastDay = day;
graph.axes.xaxis.ticks.push([x2ticks[i].value, label]); balance_graph.axes.xaxis.ticks.push([x2ticks[i].value, label]);
} }
} }
graph.axes.xaxis.ticks.push([x2ticks[x2ticks.length-1].value, '']); balance_graph.axes.xaxis.ticks.push([x2ticks[x2ticks.length-1].value, '']);
graph.replot(false); balance_graph.replot(false);
graph = x2ticks = null; x2ticks = null;
} }
</script> </script>
end; end;